如何获得停止/恢复CABasicAnimation工作的解决方案?
我使用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"];
当视图出现在屏幕上时,我需要具有不间断的可重复动画。 所以我已经阅读这篇文章(这里),并实施解决方案提供了我的苹果(解决方案)停止和恢复层动画。 所以,我使用了这些方法:
-(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;
}
我已经添加了这些方法viewWillAppear和viewWillDisappear使用并传递myImage属性的图层:
-(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方法都会被调用。 但动画不会恢复。 我有什么错,或错过了什么?
我对你的问题也有同样的问题。 经过大量的谷歌搜索...我得到了一个解决方案。
就你而言,只需在设置CABasicAnimation
时添加以下代码:
fullRotation.removedOnCompletion = NO;
而已。 我希望它能为你工作。
解决方法,解决方法和解决方法。 到目前为止,我工作的解决方案是抛弃建议的解决方案来停止/恢复图层动画:),以移除viewWillDisappear中的所有动画:
[self.myImage.layer removeAllAnimations];
然后在viewWillAppear中开始一个新的动画。 我知道我没有恢复旧的,但在我的情况下,人眼看不到它,所以我认为我会很好。 但如果任何人有苹果提供的解决方案工作,请分享。
我认为你的问题是内存管理。
试试这个:
UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"MyImage.png"]];
self.myImage = 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;
[self.myImage.layer addAnimation:fullRotation forKey:@"360"];
[self.view addSubview:self.myImage];
告诉我这是否有效。
链接地址: http://www.djcxy.com/p/12875.html上一篇: How to get solution for stopping/resuming CABasicAnimation working?