0

このサンプル コードを見てください (AppDelegate 内):

- (void)showOtherView {
if (self.viewController.view == view1) {
    self.viewController.view = view2;
} else {
    self.viewController.view = view1;
}
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionMoveIn];
[animation setSubtype:kCATransitionFromRight];
[animation setDuration:0.5];
[animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[[self.window layer] addAnimation:animation forKey:@"myKey"];

}

このメソッドは、単純にview1view2に切り替えます。私が理解していないことは、CATransitionが宣言され、 view2 をself.viewController.view割り当てた後にwindow.layerに追加されることです。なぜアニメーションが機能するのですか?

ブレークポイントを設定したところ、showOtherView メソッドが終了した後に切り替えがアニメーション化されることがわかりました。なんで?なぜview2がすぐに画面に表示されないのですか!? (少なくとも初めてこのメソッドを呼び出します)

4

1 に答える 1

0

画面への描画はコストのかかる操作であり、Cocoa は最後に実行ループのスピンごとに 1 回だけ実行します。コントローラーのビューを設定する効果 (画面に表示される) は、このメソッドが戻って制御が実行ループに渡されるまで実際には発生しません。したがって、新しいビューに対して行った構成は常に表示されます。

于 2013-02-05T20:12:32.640 に答える