Как приостановить анимацию UIImageView - PullRequest
3 голосов
/ 31 октября 2008

У меня есть анимация, которую я показываю, используя UIImageView:

imageView.animationImages = myImages;
imageView.animationDuration = 3;
[imageView startAnimating];

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

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

Ответы [ 6 ]

18 голосов
/ 09 марта 2009

Этот код приостановит анимированный объект в его текущей позиции в процессе анимации. Если вы записываете другие переменные, такие как время, прогресс или все, что вам нужно, возобновить анимацию будет довольно тривиально.

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.
8 голосов
/ 01 ноября 2008

Хммм ... так как никто, кажется, не знает, я думаю, это невозможно.

Я пошел дальше и написал свой собственный UIView с UIImageView subview, который использует NSTimer для переключения между изображениями. Преимущество этого состоит в том, что я могу приостановить и возобновить таймер на досуге, и производительность не кажется проблемой.

3 голосов
/ 11 февраля 2012

@ oddmeter просто немного отредактировать:

    animatedView.animationImages = images; //images is your array
    [animatedView startAnimating];


    //Then when you need to pause;

[animatedView stopAnimating]; //Important!!
    animatedView.image = [images objectAtIndex: 0];
2 голосов
/ 21 марта 2012

Это должно сработать: 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

0 голосов
/ 27 октября 2009

Другой вариант - установить свойство изображения, а также свойство 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];
0 голосов
/ 31 октября 2008

Может быть, вы можете сделать скриншот последнего анимированного изображения и показать его?

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