Как [UIView beginAnimations] работает?
Мне было интересно, как анимация работает в Cocoa Touch. Например:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];
view1.alpha = 1.0;
view2.frame.origin.x += 100;
[UIView commitAnimations];
Как UIView
отслеживает изменения свойств двух представлений?
Я подозреваю, что используется KVO, но действительно ли он замечает изменения для всех представлений между вызовами beginAnimations
и commitAnimations
?
Любое понимание будет оценено!
Ответы
Ответ 1
Упрощенное объяснение:
Все анимации для всех представлений обрабатываются в одном стеке, beginAnimations:context:
будет выталкивать новый активный CAAnimationGroup
в стек, а commitAnimations
будет вызывать текущую активную группу анимации.
Если в стеке есть активная группа анимации, все сеттеры для анимационных свойств создадут экземпляры подкласса CAAnimation
для обработки этого свойства и добавят в активную группу анимации.
Когда вызывается последняя анимация, она воспроизводится.
Ответ 2
Я считаю, что это просто оболочка над старыми вызовами CoreAnimation. Посмотрите на API CoreGraphics, вы увидите, что есть несколько ключей, которые вы должны установить в словаре, указав начальные и конечные значения для этих ключей.