暂停UIImageview动画 [英] Pause UIImageview Animation
问题描述
我想暂停 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屋!