SimpleViewerのウィンドウのアニメーションを実装する。やりたいのはフェードアウト。まずは検証のため調べてみた。
すると CocoaBuilderのArchiveにいい情報が見つかった。
Re: How to implement window fade-in fade-out effects
フェードアウトというよりZoomエフェクトなのだが早速試してみた。
サンプル:WindowAnimation-1.zip
アニメーションのメインは showWindow: メソッド。
- (void)showWindow:(id)sender
{
NSRect startFrom = NSZeroRect;
NSRect endAt = [_window frame];
CGFloat duration = 10;
[_window setFrame:startFrom display:NO];
[_window orderFront:nil];
[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:duration];
[[_window animator] setFrame:endAt display:YES];
[NSAnimationContext endGrouping];
}
実行するとボタンのついたウィンドウが現れる。"Show Window"を押すと showWindow: メソッドが起動されアニメーションが開始される。
左下からウィンドウがZoomして現れ、徐々に画面中央の方へ大きくなりながら移動していく。そして最後に下記のウィンドウが表示される。
おお、簡単だ。
- - - -
とはいえ、上記サンプルは簡易でウィンドウ自体は拡大縮小ではなくクリッピングに近い。