2012-01-31 47 views
4

我有一个简单的CABasicAnimation作为一个无限动画(我有一个轮子,我永远不停地旋转)连线起来。这里是我设置显式动画的方法:当应用程序进入和退出背景时暂停和恢复核心动画

-(void)perform360rotation:(UIImageView*) imageView { 
CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
// to rotate around a specific axis, specify it in the KeyPath parameter like below 
//CABasicAnimation* anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.x"]; 
[anim setDuration:self.speed]; // Animation duration 
[anim setAutoreverses:NO]; 
[anim setRepeatCount:HUGE_VALF]; // Perfrom animation large number of times 
[anim setFromValue:[NSNumber numberWithDouble:0.0f]]; 
[anim setToValue:[NSNumber numberWithDouble:(M_PI * 2.0f)]]; 
[[imageView layer] addAnimation:anim forKey:@"wheeloRotation"]; 
} 

我从我的viewWillAppear方法调用这个animtion方法。当应用程序进入后台并重新显示时,动画不再起作用。当谷歌搜索时,我想出了苹果公司的this。一切都好,我在相同的viewcontroller.m文件中实现了Apple的这样的推荐,该文件具有用于旋转视图的perform360rotation方法。

-(void)pauseLayer:(CALayer*)layer 
{ 
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:[self.wheelView layer]]; 
layer.speed = 0.0; 
layer.timeOffset = pausedTime; 
NSLog(@"pauseLayer:paused time = %f",pausedTime); 
} 

-(void)resumeLayer:(CALayer*)layer 
{ 
CFTimeInterval pausedTime = [layer timeOffset]; 
NSLog(@"resumeLayer:paused time = %f",pausedTime); 
layer.speed = 1.0; 
layer.timeOffset = 0.0; 
layer.beginTime = 0.0; 
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:[self.wheelView layer]] - pausedTime; 
layer.beginTime = timeSincePause; 
} 

同样,在谷歌上搜索,我看到的普遍共识是,我所说的暂停和恢复从AppDelegate的方法。所以,我没有他们这样的(LVC是有我在这个问题开始提到的viewcontroller.m类pauseLayer和resumeLayer方法正在从viewWillAppear中和viewWillDisappear方法中调用。):

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
[lVC viewWillDisappear:YES]; 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
[lVC viewWillAppear:YES]; 

} 

无骰子呢。当应用重新输入前景时,动画仍然不会恢复。有什么我做错了吗?

回答

1

调用viewWillAppear可能会导致其他副作用,并且通常不是开始动画的好地方,请尝试听取UIApplicationWillEnterForegroundNotification并在处理程序中添加您的resumeLayer:

+2

@overborming你知道为什么核心动画在相应的视图由于制表变化而消失时为什么会被删除 – 2012-12-06 12:40:37

+2

@Ilker Baltaci这很可能是由于性能优化。如果确实没有在屏幕上停止动画,请停止动画。 – overboming 2012-12-17 09:55:35