如何获得停止/恢复CABasicAnimation工作的解决方案?

Cen*_*ion 7 core-animation rotation uiimageview cabasicanimation ios

我正在使用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"];
Run Code Online (Sandbox Code Playgroud)

我需要有不间断的可重复动画,当视图出现在屏幕上时,它会恢复.所以我已经阅读了这篇文章(这里)并实现了解决方案提供了我的苹果(解决方案)来停止和恢复图层动画.所以,我使用过这些方法:

-(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;
}
Run Code Online (Sandbox Code Playgroud)

我已经使用并传递myImage属性的图层将这些方法添加到viewWillAppear和viewWillDisappear:

-(void)viewWillDisappear:(BOOL)animated{
    [self pauseLayer:self.myImage.layer];
}

- (void)viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];
    [self resumeLayer:self.myImage.layer];
}
Run Code Online (Sandbox Code Playgroud)

当视图进入屏幕时,图像会进行初始旋转.但后来我在屏幕上放了一些UIViewController,然后回到图像旋转的视图.问题是当视图出现在屏幕上时,图像的旋转不会恢复.我检查过:我的图像UIImageView属性不是nil,同时调用viewWillDisappear和viewWillAppear方法.但是动画没有恢复.我有什么问题,或错过了什么?

You*_*han 34

我遇到了同样的问题.经过大量的谷歌搜索......我得到了一个解决方案.

在您的情况下,只需在设置时添加以下代码CABasicAnimation:

fullRotation.removedOnCompletion = NO;
Run Code Online (Sandbox Code Playgroud)

而已.我希望它对你有用.


Cen*_*ion 6

解决方法,变通方法和变通方法.到目前为止,我所使用的解决方案是抛弃建议的停止/恢复图层动画的解决方案:),以删除viewWillDisappear中的所有动画:

[self.myImage.layer removeAllAnimations];  
Run Code Online (Sandbox Code Playgroud)

然后在viewWillAppear中启动一个新动画.我知道我不会恢复旧的,但就我而言,人眼看不到它,所以我想我会好起来的.但如果有人有苹果提供的解决方案,请分享.