とりあえずSpacesの設定が変わったというNotificationを受け取ったら、Spacesの「行と桁」を取得しなおして、それに合わせてsubviewの数も変える。増えただけなら単純に増やしてaddSubviewする。
減った時は、「行と桁」をかけて最大Workspace数を得、「現在のsubviewの数」と比べて減らす。
NSArray *views=[self subviews]; if([views count]>0){ if(spacesMax > [views count]){ for(NSInteger i=[views count];i<spacesMax;i++){ SpacesView *spview=[[SpacesView alloc] initWithFrame:rect spaceNo:i+1]; //NSLog(@"add View:no %d",[spview spaceNo]); [self addSubview:spview]; [spview release]; } }else if(spacesMax < [views count]) { for(NSInteger i=[views count]-1;i>=spacesMax;i--){ SpacesView *spview=[views objectAtIndex:i]; //NSLog(@"remove View:no %d count:%d MAX:%d loop:i:%d",[spview spaceNo],[views count],spacesMax,i); [spview removeSelf]; } } CGSWorkspace currentSpace=[self spaceNumber]; for(NSInteger i=0;i<spacesMax;i++){ if (i==currentSpace-1) { SpacesView *spview=[views objectAtIndex:i]; [spview setActive:YES]; } } }相変わらず半角<がbloggerに怒られるので全角にしてある。うーん、下手なコードだなー。もう少しきれいに書けるなあ。似たような処理をまとめて他のメソッドにしてしまおう、明日あたり。setActiveは「現在のアクティブなWorkspace」を表すBOOL値。YESなら自分がアクティブ、ということで。
多少見た目もいじって現在はこんな感じ。
removeFromSuperviewは実際は「SpacesView」というクラス(subviewになってるクラス)のメソッドで記述している。removeするのをindexの大きい方から(つまり配列の後ろから)やっているので、MutableArrayの作り直しが発生していないようだ。ま、順調に動いている。Spacesの設定をいじってもほぼリアルタイムに反映できるようになった。
次は見た目。グラディーションを使えば少しは見映えがするはず。そう思って「cocoa グラディーション」とググったら、xcatsan師匠の新cocoの最近の記事に行き着いた。なるほどー、こうやるのか。
あと、透明ウィンドウでの、半透明Viewを使ったリサイズ。まだまだ調べることがたくさんある。楽しいなあ。
0 件のコメント:
コメントを投稿