8

我正在使用 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 属性不是 nil,viewWillDisappear 和 viewWillAppear 方法都被调用。但是动画没有恢复。我是不是做错了什么,或者错过了什么?

4

3 回答 3

35

我和你有同样的问题。经过大量的谷歌搜索......我得到了解决方案。

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

fullRotation.removedOnCompletion = NO;

就是这样。我希望它对你有用。

于 2012-04-11T01:40:36.107 回答
6

变通办法,变通办法和变通办法。到目前为止,我得到的解决方案是丢弃停止/恢复层动画的建议解决方案:),删除 viewWillDisappear 中的所有动画:

[self.myImage.layer removeAllAnimations];  

然后在 viewWillAppear 中开始一个新的动画。我知道我不会恢复旧的,但就我而言,它对人眼来说并不那么明显,所以我认为我会很好。但如果有人有苹果提供的解决方案,请分享。

于 2011-08-05T10:30:59.673 回答
0

我认为你的问题是内存管理。

试试这个:

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];

告诉我这是否有效。

于 2011-08-05T10:24:57.283 回答