メイン ウィンドウのコンテンツ ビュー内に 1 つのビューを含むテスト プロジェクトを作成します。ウィンドウには、表示と非表示の 2 つのボタンがあります。表示ボタンが押されたときにビューの外観をアニメーション化し、非表示ボタンが押されたときに非表示をアニメーション化します。そして、レイヤーアクションでこれを行いたいです。つまり、ビューがスーパービューに追加または削除されるたびにアニメーションを作成したいのです。したがって、コードで [parent addSubview:view] または [view removeFromSuperview] を記述したいだけで、その瞬間にアニメーションが機能するはずです。したがって、レイヤーアクションは私のニーズに合っているようです。
アプリのスクリーンショットとソース コード(XCode 4.6) は次のとおりです。
これを行うために私がしたことは次のとおりです。
表示/非表示のビューを作成し、レイヤー アクションを追加します。
_coloredView = [[ColoredView alloc] initWithFrame:NSMakeRect(0, 0, 200, 200)];
_coloredView.bgColor = [NSColor yellowColor];
_coloredView.wantsLayer = YES;
// making appear transition from left
CATransition *appearTransition = [CATransition animation];
[appearTransition setDuration:2];
[appearTransition setType:kCATransitionPush];
[appearTransition setSubtype:kCATransitionFromLeft];
[_coloredView.layer addAnimation:appearTransition forKey:kCAOnOrderIn];
次に、表示ボタンがクリックされると、呼び出します
[contentView addSubview:self.coloredView];
クリックして消えると、次のように呼び出します。
[self.coloredView removeFromSuperview];
そして、物事の一部が機能しているようです。最初は黄色の四角形が表示されます。しかし、ここに非常に奇妙なもののリストがあります:
addAnimation:forKey:
最初に表示されたアニメーションが機能しなくなるため、(ビューが消えた後) ボタンがクリックされるたびに呼び出す必要があります。Disappear はまったく機能しません (ビューの初期化後、または [消える] ボタンが押される前にコードを追加しようとすると)
アニメーターを使用してサブビューを追加しようとすると、トランジションが機能せず、デフォルトのフェードイン アニメーションが表示されるだけです。
左から右への移動中に、ある種のフェージングが機能するようです。期間をより大きな値に設定すると表示されます。