CATransition и конкретное время выполнения

Посмотрите на этот пример кода (в 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 объявляется и добавляется в window.layer после назначения view2 в self.viewController .просмотреть. Почему анимация работает?

Я установил точки останова и выяснил, что переключение анимации происходит после завершения метода showOtherView. Почему? Только почему view2 сразу не появляется на экране!? (по крайней мере, я впервые вызываю этот метод)


person user2044441    schedule 05.02.2013    source источник


Ответы (1)


Рисование на экране — дорогостоящая операция, и Cocoa делает это только один раз за спин цикла выполнения, в конце. Эффекты установки представления контроллера — его вывод на экран — на самом деле не происходят до тех пор, пока этот метод не вернётся и управление не перейдёт в цикл выполнения. Таким образом, любые настройки, которые вы сделаете для нового представления, всегда будут отображаться.

person jscs    schedule 05.02.2013