У меня есть анимация, которую я показываю с помощью UIImageView:
imageView.animationImages = myImages;
imageView.animationDuration = 3;
[imageView startAnimating];
Я знаю, что могу остановить его, используя stopAnimating, но я хочу иметь возможность приостановить его. Причина в том, что когда вы вызываете stop, ни одно из ваших анимационных изображений не отображается, в то время как я бы хотел, чтобы последнее, работающее в то время, когда я нажимаю кнопку, не ложилось.
Я попытался установить для продолжительности гораздо большее число, но это также приводит к исчезновению всех изображений. Должен быть действительно простой способ сделать это?





Может быть, вы можете сделать снимок экрана последнего анимированного изображения и отобразить его?
Хммм ... раз уж никто не знает, думаю, это невозможно.
Я пошел дальше и написал свой собственный UIView с UIImageViewsubview, который использует 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.
Это правильный ответ (и его следует принять), большое спасибо!
Другой вариант - установить свойство изображения, а также свойство 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];
@oddmeter просто небольшое изменение:
animatedView.animationImages = images; //images is your array
[animatedView startAnimating];
//Then when you need to pause;
[animatedView stopAnimating]; //Important!!
animatedView.image = [images objectAtIndex: 0];
Это работает, только если вы остановились прямо у кадра, расположенного с индексом 0.
Это должно помочь: https://developer.apple.com/library/ios/#qa/qa2009/qa1673.html
Он в основном сообщает вам, что вам нужно сделать, чтобы приостановить / возобновить любую анимацию на основе CALayer.
Если вам неудобно использовать методы CALayer для анимации, управляемой UIImageView, вы всегда можете просто сделать анимацию на основе массива UIImage самостоятельно. Необходимый код очень короткий, вы можете взять его отсюда: http://rssv2.blogspot.com/2011/04/animating-series-of-images-with-calayer.html
Я тоже хотел приостановить свою анимацию .. В этом коде, что такое presentationLayer?