2012-06-19 4 views
4

Я хочу приостановить UIImageView animation и на основании моих исследований обнаружил, что вы можете остановить анимацию изображений, но вы не можете приостановить последовательность. Вызывая оператор stop animating на UIImageView, он останавливает анимацию и заполняет изображение.Pause UIImageview Animation

Чтобы приостановить анимацию UIImages, необходимо использовать NSTimer.

Я уже использовал один NSTimer в приложении для загрузки view controllers один за другим с различными временными интервалами. У меня есть слайд-шоу UIImages в каждом view controller.

Проблема, когда таймер паузы view controllers приостанавливаются загрузка далее, но view controller, которая находится на дисплее в то время еще показывает слайд-шоу UIImages этого view controller несколько раз, пока пауза не будет возобновлена. Поэтому я хочу приостановить это слайд-шоу.

Это где им с помощью NSTimer

-(void)playpauseAction:(id)sender { 
if([audioPlayer isPlaying]) 
{ 
    [sender setImage:[UIImage imageNamed:@"Play Icon.png"] forState:UIControlStateSelected]; 
    [audioPlayer pause]; 
    [self pauseTimer]; 
}else{ 
    [sender setImage:[UIImage imageNamed:@"pause.png"] forState:UIControlStateNormal]; 
    [audioPlayer play]; 
    [self resumeTimer]; 
if(isFirstTime == YES) 
    { 
    self.timer = [NSTimer scheduledTimerWithTimeInterval:11.0 
             target:self 
             selector:@selector(displayviewsAction:) 
             userInfo:nil 
             repeats:NO]; 
     isFirstTime = NO; 
    }   
    } 
    } 

Это как displayviewsAction нагрузки 11 контроллеров просмотреть один за другим через разные промежутки времени

- (void)displayviewsAction:(id)sender 
{ 
First *firstController = [[First alloc] init]; 
firstController.view.frame = CGRectMake(0, 0, 320, 480); 
CATransition *transitionAnimation = [CATransition animation]; 
[transitionAnimation setDuration:1]; 
[transitionAnimation setType:kCATransitionFade]; 
[transitionAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 
[self.view.layer addAnimation:transitionAnimation forKey:kCATransitionFade]; 
[self.view addSubview:firstController.view]; 
[self.view addSubview:toolbar]; 
[firstController release]; 
self.timer = [NSTimer scheduledTimerWithTimeInterval:23 target:self selector:@selector(Second) userInfo:nil repeats:NO];  

} 

-(void)Second 
{ 
Second *secondController = [[Second alloc] init]; 
secondController.view.frame = CGRectMake(0, 0, 320, 480); 
CATransition *transitionAnimation = [CATransition animation]; 
[transitionAnimation setDuration:1]; 
[transitionAnimation setType:kCATransitionReveal]; 
[transitionAnimation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; 
[self.view.layer addAnimation:transitionAnimation forKey:kCATransitionReveal]; 
[self.view addSubview:secondController.view]; 
[self.view addSubview:toolbar]; 
[secondController release]; 
self.timer = [NSTimer scheduledTimerWithTimeInterval:27 target:self selector:@selector(Third) userInfo:nil repeats:NO]; 
} 

И это, как начальное изображение анимации в поле зрения контроллер

// Displays UIImageView 
UIImageView* ImageView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, 300, 235)]; 
self.view.backgroundColor = [UIColor brownColor]; 
// load all the frames of our animation 
ImageView.animationImages = [NSArray arrayWithObjects:  
           [UIImage imageNamed:@"1a.png"], 
           [UIImage imageNamed:@"1b.png"], 
           nil]; 

// all frames will execute in 25 seconds 
ImageView.animationDuration = 25; 
// start animating 
[ImageView startAnimating]; 
ImageView.layer.borderWidth = 2; 
ImageView.layer.borderColor = [[UIColor whiteColor]CGColor]; 
[ImageView.layer setMasksToBounds:YES]; 
[ImageView.layer setCornerRadius:15.0f]; 
[baseView addSubview:ImageView]; 

Теперь, если кто-то может помочь мне, как приостановить это слайд-шоу UIImage animation, когда это NSTimer паузы.

Спасибо за помощь.

ответ

9

Вы можете использовать код, предоставленный apple, для приостановки и возобновления анимации.

-(void)pauseLayer:(CALayer*)layer 
{ 
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil]; 
layer.speed = 0.0; 
layer.timeOffset = pausedTime; 
} 

-(void)resumeLayer:(CALayer*)layer 
{ 
CFTimeInterval pausedTime = [layer timeOffset]; 
layer.speed = 1.0; 
layer.timeOffset = 0.0; 
layer.beginTime = 0.0; 
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime; 
layer.beginTime = timeSincePause; 
} 

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

CALayer *player = ImageView.layer; 
[self pauseLayer:player]; 

Надеюсь, это поможет вам.