Как приостановить анимацию UIImageView

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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
16 072
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Ответ принят как подходящий

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

Я пошел дальше и написал свой собственный 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.

Я тоже хотел приостановить свою анимацию .. В этом коде, что такое presentationLayer?

Cathy 13.07.2011 15:27

Это правильный ответ (и его следует принять), большое спасибо!

shem 28.11.2012 12:40
Этот ответ, который помог мне добиться этого.
Nikhil Lihla 30.06.2014 13:58

Другой вариант - установить свойство изображения, а также свойство 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.

mattsson 16.12.2015 16:04

Это должно помочь: 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

Другие вопросы по теме