Как я могу связать анимацию в iPhone-OS? - PullRequest
3 голосов
/ 12 мая 2009

Я хочу сделать некоторые сложные анимации. Но я знаю только, как оживить блок изменений. Есть ли способ цепочки анимаций, чтобы я мог, например, внести изменения A -> B -> C -> D -> E -> F (и т. Д.), В то время как core-анимация ждет, пока каждая анимация не закончится, и затем переходит к следующему?

В частности, я хочу сделать это: у меня есть UIImageView, который показывает куб.

Фаза 1) Кубик ровный на полу

Фаза 2) Куб вращается немного влево, а начало вращения находится внизу слева.

Фаза 3) Куб вращается немного вправо, а начало вращения - внизу справа.

Эти фазы повторяются 10 раз и останавливаются на Фазе 1). Кроме того, покачивание становится меньше со временем.

Я знаю, как анимировать ОДНО изменение в блоке, но как я могу сделать такую ​​повторяющуюся вещь с каким-то сложным кодом между ними? Это не то же самое с течением времени. Он меняется, так как покачивание становится все меньше и меньше, пока не прекратится.

Ответы [ 3 ]

4 голосов
/ 12 мая 2009

Если вы используете анимацию UIView ...

Вы можете предоставить метод остановки анимации, который вызывается, когда анимация действительно завершена (см. setAnimationDelegate). Таким образом, вы можете поставить массив анимаций в очередь и быть готовым к работе. Установите делегата, затем начните первую анимацию. Когда он заканчивается, он вызывает метод setAnimationDidStopSelector (обязательно отметьте флаг finished, чтобы убедиться, что это действительно сделано, а не просто приостановлено). Вы также можете передать контекст анимации, который может быть индексом в вашей очереди анимаций. Это также может быть структура данных, которая содержит счетчики, так что вы можете регулировать значения анимации в каждом цикле.

Значит, нужно просто подождать, пока одно будет сделано, а затем запустить следующий, снятый с очереди.

Тот же метод применяется, если вы используете другие типы анимации. Вам просто нужно настроить свои структуры данных, чтобы они знали, что делать после каждого из них.

1 голос
/ 12 мая 2009

Вам нужно будет настроить делегата анимации внутри ваших блоков анимации. Подробности смотрите в setAnimationDelegate в документации UIView.

По сути, ваш делегат может быть уведомлен о завершении анимации. Используйте параметр context, чтобы определить, какой шаг в вашей анимации заканчивается (Фаза 1, Фаза 2 и т. Д.)

Эта стратегия должна позволить вам связать столько блоков анимации, сколько вы хотите.

0 голосов
/ 12 мая 2009

Я думаю, что ответ на ваш вопрос заключается в том, что вам нужно получить больше подробностей о том, что вы хотите сделать. У вас явно есть идея, но более подробные детали помогут вам ответить на свой вопрос.

...