Подтвердить что ты не робот

Как [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?

Любое понимание будет оценено!

4b9b3361

Ответ 1

Упрощенное объяснение:

Все анимации для всех представлений обрабатываются в одном стеке, beginAnimations:context: будет выталкивать новый активный CAAnimationGroup в стек, а commitAnimations будет вызывать текущую активную группу анимации.

Если в стеке есть активная группа анимации, все сеттеры для анимационных свойств создадут экземпляры подкласса CAAnimation для обработки этого свойства и добавят в активную группу анимации.

Когда вызывается последняя анимация, она воспроизводится.

Ответ 2

Я считаю, что это просто оболочка над старыми вызовами CoreAnimation. Посмотрите на API CoreGraphics, вы увидите, что есть несколько ключей, которые вы должны установить в словаре, указав начальные и конечные значения для этих ключей.