首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAAnimation,捕捉回来

CAAnimation,捕捉回来
EN

Stack Overflow用户
提问于 2012-02-17 23:44:31
回答 2查看 1.7K关注 0票数 2

我正在试验CAAnimation,就像许多新手做CAAnimation一样;完成后,该层将恢复到其原始状态。

关于如何解决这个问题在这里问了几次,答案是将以下代码添加到您的CAAnimation中。

代码语言:javascript
复制
animation.removedOnCompletion = NO;

虽然这是可行的,但根据苹果的WWDC讨论CAAnimation的视频,推荐的解决方案是:

代码语言:javascript
复制
// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

所以我很想知道这两者之间的主要区别是什么,以及什么时候使用它们?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-18 00:19:20

显式动画实际上不会修改CALayer的属性。

他们只是修改了presentationLayer,这就是你实际看到的。动画完成后,您将看到与动画之前完全相同的CALayer。

通过如下方式设置该值

代码语言:javascript
复制
// animating opacity
layer.opacity = newOpacityValue;
[layer addAnimation:animation forKey:@"opacity"];

请确保将动画值存储在模型中,这样即使从层中移除动画,所做的更改也会生效。

使用removedOnCompletion = YES不是一个持久的解决方案。无论何时从层中删除动画,它都会恢复到原来的状态。

票数 13
EN

Stack Overflow用户

发布于 2012-02-18 00:12:48

您不需要"removedOnCompletion“标志。

您需要的是将不透明度设置为动画之外的新值-如您的第二个示例。

使用"removedOnCompletion“将不会释放您的动画对象-如果您有大量动画,则会耗尽您的内存。

代码语言:javascript
复制
CABasicAnimation *animation=[CABasicAnimation animationWithKeyPath:@"opacity"];
animation.fromValue=[NSNumber numberWithFloat:0];
animation.toValue=[NSNumber numberWithFloat:1];

layer.opacity=1; // this line will make sure the opacity will stay 1 when the animation is completed
[layer addAnimation:animation forKey:@"opacity"];
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9331238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档