如何为 CALayer 使用基于块的动画?

How to use block based animation for a CALayer?

我尝试使用 UIView 的块动画无限地脉动从透明到不透明的渐变。最终结果是渐变保持完全不透明,没有动画。甚至可以使用块样式为 CALayer 设置动画,还是我必须使用老式的语句系列?

_pulsingLight = [CAGradientLayer layer];
_pulsingLight.colors = @[(id)([UIColor colorWithWhite:1.0 alpha:kPulsingLightStartAlpha].CGColor),
                         (id)([UIColor colorWithWhite:1.0 alpha:kPulsingLightStopAlpha].CGColor)];
_pulsingLight.opacity = 0.0;
[self.layer insertSublayer:_pulsingLight below:_anotherView.layer];
[UIView animateWithDuration:kPulsingLightHalfLife
                      delay:0.0
                    options:UIViewAnimationOptionRepeat | UIViewAnimationOptionAutoreverse
                 animations:^{
                   _pulsingLight.opacity = 1.0;
                 }
                 completion:nil];

UIView 有基于块的动画。 CALayers 没有。您必须使用各种形式的 CAAnimation 来为 CALayer 设置动画。

也就是说,我相信您可以在 UIView 动画块中提交对视图的主要支持层的更改。

除视图的支持层之外的 CALayer 不能使用 UIView 块动画进行动画处理,但它们支持 "implicit animation" 许多属性。如果您更改不是视图支持层的层的动画 属性,系统会应用默认动画设置(时间和节奏)的更改。您可以使用 CATransaction 调用来更改这些隐式动画的设置,或者在不设置动画的情况下进行更改。