Я новичок в программировании Objective-C/iOS, и я пытаюсь понять, как работает анимация UIView под капотом.
Скажем, у меня есть такой код:
[UIView animateWithDuration:2.0 animations:^{
self.label.alpha = 1.0;
}];
Вещей, которая передается как аргумент animations
, является блок Objective-C (что-то вроде lambdas/анонимных функций на других языках), который может быть выполнен, а затем он изменяет свойство alpha
label
из текущего значение 1.0.
Однако блок не принимает аргумент прогресса анимации (скажем, от 0.0 до 1.0 или от 0 до 1000). Мой вопрос заключается в том, как анимационная среда использует этот блок, чтобы знать о промежуточных кадрах, поскольку блок определяет только конечное состояние.
EDIT:
Мои вопросы скорее касаются работы с капюшоном animateWithDuration
, а не способов ее использования.
Моя гипотеза о том, как работает код animateWithDuration
, выглядит следующим образом:
-
animateWithDuration
активирует какое-то особое состояние для всех объектов вида, в которых изменения фактически не выполняются, а только регистрируются. - он выполняет блок и изменения регистрируются.
- он запрашивает объекты views для измененного состояния и возвращает исходные и целевые значения и, следовательно, знает, какие свойства нужно изменить и в каком диапазоне выполнить изменения.
- он вычисляет промежуточные кадры на основе продолжительности и начальных/целевых значений и запускает анимацию.
Может ли кто-нибудь пролить свет на то, работает ли animateWithDuration
таким образом?