Como pausar uma animação UIImageView
-
05-07-2019 - |
Pergunta
Eu tenho uma animação que eu estou exibindo usando um UIImageView:
imageView.animationImages = myImages;
imageView.animationDuration = 3;
[imageView startAnimating];
Eu sei que posso pará-lo usando stopAnimating, mas o que eu quero é ser capaz de fazer uma pausa. A razão é que quando você chama stop, nenhuma de suas imagens com animação são exibidos, enquanto que gostaria que o último que é em cima da hora, quando eu apertar um botão para ficar acordado.
Eu tentei definir a duração para um número muito maior, mas que faz com que todas as imagens a desaparecer também. Deve haver uma maneira muito básica para fazer isso?
Solução 2
Hmmm ... já que ninguém parece saber que eu acho que não é possível.
eu fui em frente e escreveu minha própria UIView
, com um UIImageView
subview
, que usa um NSTimer
para alternar entre imagens. A vantagem disto é que eu posso pausar e retomar o temporizador no meu lazer, e desempenho não parece ser um problema.
Outras dicas
Este código irá pausar um objeto animado em sua posição atual no processo de animação. Se você gravar outras variáveis, como o tempo ou o progresso ou o que você precisa, ele deve ser bastante trivial para retomar a animação novamente.
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 apenas um pouco de edição:
animatedView.animationImages = images; //images is your array
[animatedView startAnimating];
//Then when you need to pause;
[animatedView stopAnimating]; //Important!!
animatedView.image = [images objectAtIndex: 0];
Isso deve fazer o truque: https://developer.apple .com / biblioteca / ios / # qa / qa2009 / qa1673.html
Ele basicamente diz o que você precisa fazer para pausar / retomar qualquer animação baseada CALayer
.
Se você se sentir desconfortável usando métodos CALayer
em animação controlada UIImageView
, você sempre pode apenas fazer a animação baseada em array UIImage
si mesmo. O código necessário é muito curto, você pode levá-lo a partir daqui: http://rssv2.blogspot.com/2011/04/animating-series-of-images-with-calayer.html
Outra opção é definir a propriedade imagem, bem como a propriedade animationImages
. Fazendo isso irá exibir a imagem estática quando o UIImageView
tem suas animações parado.
Assumindo sua classe é uma subclasse de UIImageView
e ter uma NSMutableArray
de imagens, faça o seguinte:
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];
Talvez você possa tirar um screenshot da última imagem animada e exibir isso?