暂停UIImageview动画 [英] Pause UIImageview Animation

查看:103
本文介绍了暂停UIImageview动画的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想暂停 UIImageView动画并根据我的研究发现你可以停止图像的动画,但你不能暂停序列。通过在 UIImageView 上调用语句停止动画,它会停止动画并使图像视图空白。

I want to pause UIImageView animation and based on my research found that you can stop the animation of the images but you cannot pause the sequence. By calling statement stop animating on the UIImageView then it stops the animation and blanks the image view.

要暂停UIImages的动画,必须使用 NSTimer

To pause the animation of UIImages one has to use NSTimer.

我已经在应用程序中使用一个 NSTimer 来在不同的时间一个接一个地加载查看控制器间隔。我在每个视图控制器中有一个 UIImages 的幻灯片放映。

I m already using one NSTimer in app for loading view controllers one after the other at different time intervals. I have a slide show of UIImages in each view controller.

问题是Timer暂停时查看控制器暂停加载,但视图当时显示的控制器仍显示该视图控制器的 UIImages 的幻灯片放映反复进行,直到恢复暂停。所以我也要暂停幻灯片。

Issue is when Timer is paused view controllers are paused from loading further but the view controller which is on display at that time still shows the slide show of UIImages of that view controller repeatedly until pause is resumed. So I want to pause that slideshow too.

这是我使用 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的方式以不同的时间间隔一个接一个地查看控制器

This is how displayviewsAction loads 11 view controllers one after another at different time intervals

- (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];
}

这就是在视图控制器中启动图像动画的方法

And that is how starting image animation within the view controller

// 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动画的幻灯片当此 NSTimer 暂停时。

Now if someone can guide me how to pause this slideshow of UIImage animation when this NSTimer pauses.

感谢您的帮助。

推荐答案

您可以使用apple提供的代码暂停和恢复动画。

you can use the code provided by apple to pause and resume your animation.

-(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函数,你可以使用以下代码。

And to get the CALayer to pass to the pauseLayer function, you can use the following code.

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

希望对您有帮助。

这篇关于暂停UIImageview动画的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆