Мне удалось выполнить это задание, и я дам общий ответ на этот вопрос.
Если вы хотите обновить текущую текущую анимацию, но вы находитесь в середине, вам нужно заменить текущую анимацию анимацией, которая завершит текущую анимацию в нужном месте.
Например, в моем вопросе есть анимация с fromValue
и byValue
. Это означает, что если вы запустите одну и ту же анимацию с различной продолжительностью, она изменит свое текущее состояние вращения на fromValue
.
Чтобы исправить это поведение, нам нужно добавить анимацию, которая завершит нашу анимацию из текущего состояния вращения до fromValue
. Чтобы получить текущее вращение или другое свойство, которое нужно анимировать, у нас есть presentationLayer
CALayer. Мы можем установить значения от него до нашей "закрывающей" анимации.
Как мы можем узнать, когда закончится анимация закрытия? Ответ CAAnimationDelegate . Просто установите делегата на закрывающую анимацию, и когда это будет сделано, добавьте еще одну анимацию с другими параметрами. Теперь вы можете без проблем обновить анимацию.
Имейте в виду, что время закрытия анимации должно быть частью исходного времени анимации, чтобы все было гладко. Вы можете рассчитать это так: (end state - current state) * original duration
.