TL; DR: использовать CALayer -actionForKey:, not -animationForKey:
Ответ на
@Dimitri Bouniol не работал у меня, когда вызывается из затронутого сеттера внутри блока анимации. Причина, по моему мнению, заключается в том, что система анимации UIView устанавливает состояние перед началом фактической анимации (и устанавливает сеттеры перед началом фактической анимации). То, что сработало для меня, вызывало аналогичный метод -actionForKey: на слое. Возвращаемое действие имеет заданную продолжительность и может быть использовано так же, как и в его ответе.
CAAnimation *animation = (CAAnimation*)
[self.layer [email protected]"position"]; // or property of interest
[CATransaction begin];
[CATransaction setAnimationDuration:animation.duration];
[CATransaction setAnimationTimingFunction:animation.timingFunction];
// CALayer animation here
[CATransaction commit];
Ответ 4
Поскольку вы используете блоки, почему бы просто не захватить переменную с ней?