Приостановка анимации UIImageView - PullRequest
4 голосов
/ 01 марта 2011

Я делаю анимацию UIImageView примерно так:

//////progressbar start
progressbar.animationImages = [NSArray arrayWithObjects:
                               [UIImage imageNamed:@"1.png"],
                               [UIImage imageNamed:@"2.png"],
                               [UIImage imageNamed:@"3.png"],
                               [UIImage imageNamed:@"4.png"],
                               [UIImage imageNamed:@"5.png"],
                               [UIImage imageNamed:@"6.png"],
                               [UIImage imageNamed:@"7.png"],
                               [UIImage imageNamed:@"8.png"],
                               [UIImage imageNamed:@"9.png"],
                               [UIImage imageNamed:@"10.png"],
                               [UIImage imageNamed:@"11.png"],
                               [UIImage imageNamed:@"12.png"],
                               [UIImage imageNamed:@"13.png"],
                               [UIImage imageNamed:@"14.png"],
                               [UIImage imageNamed:@"15.png"],
                               [UIImage imageNamed:@"16.png"],
                               [UIImage imageNamed:@"17.png"],
                               [UIImage imageNamed:@"18.png"],
                               [UIImage imageNamed:@"19.png"],
                               [UIImage imageNamed:@"20.png"],
                               [UIImage imageNamed:@"21.png"],
                               [UIImage imageNamed:@"22.png"],
                               [UIImage imageNamed:@"23.png"],
                               [UIImage imageNamed:@"24.png"],
                               [UIImage imageNamed:@"25.png"],
                               [UIImage imageNamed:@"26.png"],
                               [UIImage imageNamed:@"27.png"],
                               [UIImage imageNamed:@"28.png"],
                               [UIImage imageNamed:@"29.png"],
                               [UIImage imageNamed:@"30.png"],
                               [UIImage imageNamed:@"31.png"],
                               [UIImage imageNamed:@"32.png"],
                               [UIImage imageNamed:@"33.png"],
                               [UIImage imageNamed:@"34.png"],
                               [UIImage imageNamed:@"35.png"],
                               [UIImage imageNamed:@"36.png"],
                               [UIImage imageNamed:@"37.png"],
                               [UIImage imageNamed:@"38.png"],
                               [UIImage imageNamed:@"39.png"],
                               [UIImage imageNamed:@"40.png"],
                               [UIImage imageNamed:@"41.png"],
                               [UIImage imageNamed:@"42.png"], nil];
progressbar.animationDuration = 5.00;
progressbar.animationRepeatCount = 0;
[progressbar startAnimating];

Теперь мне нужно сделать паузу, чтобы, как только пользователь нажал кнопку, изображения не анимировались и остались на текущем изображении.

Я получил этот код из Интернета, чтобы приостановить его,

  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.

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

Ответы [ 3 ]

4 голосов
/ 19 апреля 2012

Вот мой подход:

- (IBAction)play:(id)sender
{
pauseAnimation = FALSE;
[self performSelector:@selector(changeImages) withObject:nil afterDelay:0];
[self.pauseButton setHidden:NO];
[self.playButton setHidden:YES];

}

- (IBAction)pause:(id)sender
{
pauseAnimation = TRUE;
[self.pauseButton setHidden:YES];
[self.playButton setHidden:NO];
}
- (void)changeImages
{
if (currentFrame == self.selectedAttachment.noOfFrames) 
{

    currentFrame = -1;
    return; //Don't use return, if a looped playing is required.
}
if (currentFrame == -1) {
    currentFrame = 0;
}
if (pauseAnimation) 
{
    return;
}

[self performSelector:@selector(changeImages) withObject:nil afterDelay:.5]; 

imageView.image = [frameArray objectAtIndex:currentFrame];
currentFrame ++;    
}

Даже вы можете изменить изображения между ...

- (IBAction)replaceImage:(id)sender
{
UIImage *replaceImage = [[UIImage alloc]init];
replaceImage = [UIImage imageNamed:@"Bluehound.gif"];
int i = arc4random()%25;
[frameArray replaceObjectAtIndex:i withObject:replaceImage];
}

Спасибо всем.Теперь вы можете воспроизводить, приостанавливать, заменять изображения и т. Д. * Есть ошибка: повторное нажатие на кнопку воспроизведения увеличивает скорость ...: P

4 голосов
/ 09 августа 2011

Я также пытался использовать этот код, и он не работал.

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

http://developer.apple.com/library/ios/#qa/qa1673/_index.html

Чтобы передать CALayer на pauseLayerфункции, вы можете использовать следующий код.

CALayer *player = progressbar.layer;
[self pauseLayer:player];
0 голосов
/ 23 июня 2012

Пожалуйста, попробуйте stopAnimating

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