我有一个简单的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];
}
目前还没有进展。当应用程序重新进入前台时,动画仍然不会恢复。我做错了什么吗?