如何为 CALayer 使用基于块的动画?
Posted
技术标签:
【中文标题】如何为 CALayer 使用基于块的动画?【英文标题】:How to use block based animation for a CALayer? 【发布时间】:2015-09-12 01:38:32 【问题描述】:我尝试使用 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];
【问题讨论】:
【参考方案1】:UIView 具有基于块的动画。 CALayers 没有。您必须使用各种形式的 CAAnimation 来为 CALayer 设置动画。
也就是说,我相信您可以将更改提交到 UIView 动画块内的视图的主要支持层。
除了视图的支持层之外的 CALayers 不能使用 UIView 块动画进行动画处理,但它们确实支持许多属性的“隐式动画”。如果您更改不是视图支持层的图层的可动画属性,系统会使用默认动画设置(时间和步调)应用该更改。您可以使用 CATransaction 调用来更改那些隐式动画的设置,或者在没有动画的情况下进行更改。
【讨论】:
以上是关于如何为 CALayer 使用基于块的动画?的主要内容,如果未能解决你的问题,请参考以下文章