UIImageView startAnimating: Как вы можете остановить его на последнем изображении в серии? - PullRequest
3 голосов
/ 28 июля 2010

Я использую UIImageView для создания простой анимации, и все работает отлично, но когда я использую startAnimating, анимация запускается один раз (как я хочу), но возвращаюсь к первому кадру. Я хочу, чтобы анимация остановилась на последнем кадре.

Я использую:

myAnimation.animationImages = myArray;
myAnimation.animationDuration = 0.7;
myAnimation.animationRepeatCount = 1;
[myAnimation startAnimating];

Могу ли я использовать переопределить метод startAnimating? Как лучше всего решить мою проблему?

Ответы [ 2 ]

8 голосов
/ 28 июля 2010

Перед началом анимации установите последнее изображение в представлении изображения imageView.image = yourLastImage;, а затем запустите анимацию.После завершения анимации в представлении изображения отобразится yourLastImage.

Что касается NSTimer, то нет другой альтернативы, чтобы узнать, когда анимация по умолчанию закончилась.Поэтому, если вы хотите что-то сделать после завершения анимации, вы должны полагаться на NSTimer, как предложил deanWombourne.

0 голосов
/ 28 июля 2010

Это очень раздражает - я хотел бы видеть свойство удаления, чтобы мы могли узнавать о событиях анимации!

Вот как я это делал в прошлом (может быть, и лучше!)

1) Установите свойство анимационных изображений и запустите анимацию (как в вашем коде в вопросе)

2) Запланировать отключение NSTimer за секунды 'animationDuration'

3) Когда таймер отключится, установите свойство изображения как последний объект в массиве animationImages, а затем установите для свойства animationImages значение nil.

EDIT: Ron Srebro правильно указал на возможную ошибку - если таймер вообще задерживается, анимация будет выглядеть неправильно.

Я исправил это, дважды добавив последний кадр к animationImages - это означает, что если таймер задерживается, мы все равно показываем последний кадр, и пользователь никогда не заметит.

NB. Это не на 100% исправит эту ошибку, но я никогда не видел, чтобы это случилось с этим исправлением на месте. Это может не работать для приложений с интенсивным использованием процессора, так как таймер может быть задержан более чем на один кадр: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...