我正在使用 CABasicAnimation 旋转 UIImageView,但无法恢复暂停的动画。动画在 viewDidLoad 方法中开始:
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = img;
[self.view addSubview:img];
[img release];
CABasicAnimation *fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
fullRotation.fromValue = [NSNumber numberWithFloat:0];
fullRotation.toValue = [NSNumber numberWithFloat:((360*M_PI)/180)];
fullRotation.duration = 10;
fullRotation.repeatCount = LARGE_VAL;
[img.layer addAnimation:fullRotation forKey:@"360"];
我需要有不间断的可重复动画,当视图出现在屏幕上时就会恢复。所以我读了这篇文章(here https://stackoverflow.com/questions/2306870/is-there-a-way-to-pause-a-cabasicanimation)并实施了解决方案,提供了我的苹果(solution http://developer.apple.com/library/ios/#qa/qa1673/_index.html) 用于停止和恢复图层动画。所以,我使用了这些方法:
-(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;
}
我已使用并传递 myImage 属性的图层将这些方法添加到 viewWillAppear 和 viewWillDisappear 中:
-(void)viewWillDisappear:(BOOL)animated{
[self pauseLayer:self.myImage.layer];
}
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
[self resumeLayer:self.myImage.layer];
}
当视图出现在屏幕上时,图像会进行初始旋转。但随后我将一些 UIViewController 放在屏幕上,然后返回到具有图像旋转的视图。问题是当视图出现在屏幕上时,图像的旋转不会恢复。我已经检查过:我的图像 UIImageView 属性不为零, viewWillDisappear 和 viewWillAppear 方法都被调用。但动画并没有恢复。我是不是做错了什么,或者错过了什么?