Как приостановить анимацию UIImageView
-
05-07-2019 - |
Вопрос
У меня есть анимация, которую я показываю с помощью UIImageView:
imageView.animationImages = myImages;
imageView.animationDuration = 3;
[imageView startAnimating];
Я знаю, что могу остановить это с помощью stopAnimating, но я хочу сделать это, чтобы сделать паузу. Причина в том, что когда вы вызываете stop, ни одно из ваших анимационных изображений не отображается, в то время как я хотел бы, чтобы последнее, которое работает в тот момент, когда я нажимал кнопку, не ложилось спать.
Я попытался установить длительность гораздо большего числа, но это также приводит к исчезновению всех изображений. Должен быть действительно простой способ сделать это?
Решение 2
Хммм ... так как никто, кажется, не знает, я думаю, что это невозможно. Р>
Я пошел дальше и написал свой собственный UIView
с UIImageView
, который использует NSTimer
для переключаться между изображениями. Преимущество этого состоит в том, что я могу приостановить и возобновить таймер на досуге, и производительность не кажется проблемой.
Другие советы
Этот код приостановит анимированный объект в его текущей позиции в процессе анимации. Если вы записываете другие переменные, такие как время, прогресс или все, что вам нужно, возобновить анимацию будет довольно тривиально.
UIView *viewBeingAnimated = //your view that is being animated
viewBeingAnimated.frame = [[viewBeingAnimated.layer presentationLayer] frame];
[viewBeingAnimated.layer removeAllAnimations];
//when user unpauses, create new animation from current position.
@oddmeter просто немного отредактируйте:
animatedView.animationImages = images; //images is your array
[animatedView startAnimating];
//Then when you need to pause;
[animatedView stopAnimating]; //Important!!
animatedView.image = [images objectAtIndex: 0];
Это должно помочь: https://developer.apple .com / библиотека / ИОС / # ОК / qa2009 / qa1673.html
В основном он говорит вам, что вам нужно сделать, чтобы приостановить / возобновить любую анимацию на основе CALayer
.
Если вам неудобно использовать методы CALayer
в управляемой анимации UIImageView
, вы всегда можете просто сделать анимацию на основе массива UIImage
. Необходимый код очень короткий, вы можете взять его отсюда: http://rssv2.blogspot.com/2011/04/animating-series-of-images-with-calayer.html
Другой вариант - установить свойство изображения, а также свойство animationImages
. При этом будет отображаться статическое изображение, когда анимация UIImageView
остановлена.
Предполагая, что ваш класс является подклассом UIImageView
и имеет NSMutableArray
изображений, выполните следующие действия:
self.animationImages = images;
//yes, I'm skipping the step to check and make sure you have at least one
//element in your array
self.image = [images objectAtIndex: 0];
Может быть, вы можете сделать скриншот последнего анимированного изображения и показать его?