ipad: почему первая анимация моей последовательной анимации всегда завершается немедленно? - PullRequest
0 голосов
/ 27 октября 2011

По аналогии с SO, ссылка на вопрос: Почему UIView: animateWithDuration завершается немедленно? Однако мой код использует [UIView beginAnimation] и т. Д.

У меня по сути это:

[UIView beginAnimation ...];
[UIView setAnimationDelay: 0.0];
[UIView setAnimationDuration: 1.25];
animatedImage.transform = "scale-up transform";

[UIView setAnimationDelay: 1.25]
[UIView setAnimationDuration: 0.50];
animatedImage.transform = "scale-down transform";

[UIView commitAnimation];

Изображение немедленно переходит к размеру увеличения, затем через 1,25 секунды оно хорошо анимируется до размера «уменьшения».Если я соединю несколько последовательностей, все они будут работать правильно, кроме первого.

1 Ответ

1 голос
/ 27 октября 2011

Когда вы помещаете анимации в одну и ту же зону beginAnimation, они будут анимироваться в одно и то же время.

Вызывая [UIView setAnimationDelay: 1.25], вы перезаписываете только свой предыдущий [UIView setAnimationDelay: 0.0].

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

Я предлагаю использоватьСинтаксис block вместо него позволяет выполнять действия после завершения анимации:

[UIView animateWithDuration:1.25
                 animations:^{animatedImage.transform = "scale-up transform";}
                 completion:^(BOOL finished)
                 {
                     [UIView animateWithDuration:1.25
                                      animations:^{animatedImage.transform = "scale-down transform";}
                     ];
                 }
 ];

Код в блоке завершения (конструкции ^ {code} называются «блоками») - это то, что происходит после первогоанимация.Вы можете продолжать эту цепочку столько анимаций, сколько хотите.

(BOOL закончен) - это параметр, передаваемый вместе с блоком.Он говорит, была ли анимация действительно закончена.Если НЕТ, ваша анимация была прервана.

...