引き続き調査。いろいろと情報があったが、ウィンドウのフェードアウトは NSViewAnimationを使えばよさそうなことがわかった。
NSViewAnimation Class Reference
これをつかった解説があり、ずばりフェードアウトの例が載っていた。
Animating Views and Windows
早速試してみよう。
サンプル:WindowAnimation-2.zip
前回のサンプルを流用し、メイン部分だけ書き換えた。_windowはアウトレット。あらかじめ IBで作ったウィンドウを接続してある。
AppController.m
- (void)showWindow:(id)sender
{
[_window orderFront:nil];
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
[dict setObject:_window forKey:NSViewAnimationTargetKey];
[dict setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];
NSViewAnimation *anim = [[NSViewAnimation alloc]
initWithViewAnimations:[NSArray arrayWithObject:dict]];
[anim setDuration:1];
[anim setAnimationCurve:NSAnimationEaseIn];
[anim startAnimation];
[anim release];
}
最初に表示されるウィンドウのボタンを押すとこのメソッドが呼ばれる。設定値を NSMutableDictionary へ入れて後は NSViewAnimationを制御するだけ。
実行してみよう。
おお。いい感じにフェードアウトしている。静止画ではわかりづらいが、下のウィンドウが徐々に薄くなって(透明度が高くなって)最後は見えなくなる。
NSViewAnimationは NSViewAnimationStartFrameKey, NSViewAnimationEndFrameKey を使えば大きさを変えた場合のZoomアニメーションも可能になる。ただ試したところ前回同様、拡大縮小は行っていないようだ(縮小時はクリッピング)。