当应用程序进入和退出后台时暂停和恢复核心动画。

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方法中调用这个动画方法。当应用程序进入后台,然后重新出现时,动画就不再起作用了。 在谷歌搜索后,我找到了苹果公司的这篇文章。一切都很好,我按照苹果公司的建议在同一个视图控制器.m文件中实现了它,该文件具有执行360度旋转视图的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个回答

1

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


2
@overborming 你知道为什么当相应的视图由于选项卡更改而消失时,核心动画也被移除吗? - Ilker Baltaci
2
@Ilker Baltaci 这很可能是由于性能优化引起的。 如果确定不在屏幕上,停止对任何内容进行动画处理。 - overboming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接