Objective c CALayer不透明度动画

Objective c CALayer不透明度动画,objective-c,core-animation,calayer,opacity,Objective C,Core Animation,Calayer,Opacity,我想创建一个CALayer动画,给人一种“浮华”的效果。为此,我尝试设置“不透明度”属性的动画,但我的问题是,我不知道从哪里开始以及如何开始 以下是动画的图形说明: opacity | ___ 1 | | | | | | * repeatCount 0 |___| |_ . . . -------------------------> time |______| duration 不透明度从0开始,然后动画设置为1,然

我想创建一个CALayer动画,给人一种“浮华”的效果。为此,我尝试设置“不透明度”属性的动画,但我的问题是,我不知道从哪里开始以及如何开始

以下是动画的图形说明:

opacity
   |    ___
1  |   |   |
   |   |   |    * repeatCount
0  |___|   |_ . . .
   -------------------------> time
    |______|
    duration
不透明度从0开始,然后动画设置为1,然后再次设置为0(此0到1到0动画所需的秒数等于持续时间)。然后此过程重复“repeatCount”次

以下是代码的一些背景:

float duration = ...; // 0.2 secs, 1 sec, 3 secs, etc
int repeactCount = ...; // 1, 2, 5, 6, ect

CALayer* layer = ...; // I have a CALayer from another part of the code
layer.opacity = 0;

// Animation here

done = YES; // IN THE END of the animation set this ivar to yes

实现这一目标的最佳方式是什么?我以前从未使用过CALayers,所以这也是一个了解他们的动画系统如何工作的好机会。顺便说一句,我已经搜索了文档,我了解您如何添加一到两个简单动画,但我不知道如何执行这一操作。

实现这一点的最佳方法是使用显式动画(请参阅),方法是创建
cabasicanition
的实例并将其添加到层中

代码如下所示:

CABasicAnimation *flash = [CABasicAnimation animationWithKeyPath:@"opacity"];
flash.fromValue = [NSNumber numberWithFloat:0.0];
flash.toValue = [NSNumber numberWithFloat:1.0];
flash.duration = 1.0;        // 1 second
flash.autoreverses = YES;    // Back
flash.repeatCount = 3;       // Or whatever

[layer addAnimation:flash forKey:@"flashAnimation"];

如果您想知道动画何时完成,可以设置一个代理并实现
animationDidStop:finished:
方法,但是最好使用一个完成块,因为它允许所有代码都位于同一位置。如果您是为iOS 4或OS X编写的,那么您可以使用“优秀”类别来完成此任务。

特洛伊木马的答案非常好。我只想补充一点,如果你想更多地控制“时间线”(淡出需要多长时间?然后等待多长时间?然后淡入需要多长时间?等等),你需要将多个
CABasicAnimation
s组合成一个caanimation组

您可能想阅读我的书中关于此主题的章节,其中最后一部分是关于CAAnimation及其后代的教程:


请注意,我的讨论是针对iOS的;在Mac OS X上,如果您是这样的话,视图/层体系结构有点不同,但它对CAAnimation的描述仍然是正确的。

谢谢!那很好用。只有一件事:它是“animationWithKeyPath:”@Alex好的,我会更新答案(它来自内存-并不总是最可靠的来源…)我不明白。它淡入淡出,然后立即消失。@trojanfoe应该链接到这里吗?图XD的向上投票