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"];

}

此方法只是将view1切换到view2。我不明白的是,CATransition在将view2分配给self.viewController.view之后被声明并添加到window.layer。为什么动画有效?

我确实设置了断点并发现在 showOtherView 方法完成后切换动画。为什么?只是为什么view2没有立即出现在屏幕上!?(至少我第一次调用这个方法)

4

1 回答 1

0

绘制到屏幕是一项昂贵的操作,而Cocoa 每次运行循环最后只执行一次。设置控制器视图的效果——它被放到屏幕上——直到这个方法返回并且控制传递到运行循环之后才真正发生。因此,您对新视图所做的任何配置都将始终显示。

于 2013-02-05T20:12:32.640 回答