我想为径向渐变设置动画以缩小和增大内半径,就像它是脉冲一样。
现在我正在使用CGGradient渲染渐变,但我不确定如何为它设置动画。我见过这个话题
Can you animate gradients using Quartz in an iPhone?
其中解释了如何使用CAGradientLayer为线性渐变设置动画,但似乎不会绘制径向渐变。
是否有一种简单的方法可以为CGGradient设置动画,或者某种方式来创建径向渐变CAGradientLayer?
任何想法都表示赞赏。
答案 0 :(得分:2)
如果只有Core Image在手机上,这将是微不足道的。您可以使用动画滤镜。 ; - )
CAGradientLayer允许为其属性设置动画,但是,它目前仅支持线性渐变。
如果您想要使用Core Animation进行动画处理,我唯一能想到的就是为您绘制渐变的视图的变换设置动画。
您可以非常简单地为任何视图的变换设置动画。只需在视图中绘制渐变,就像您可能已经在做的那样,然后使用缩放设置为变换设置动画。使用显式动画,它将类似于:
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform"];
[anim setFromValue:[NSValue valueWithCATransform3D:CATransform3DIdentity]];
// Scale x and y up
[anim setToValue:[NSValue valueWithCATransform3D:
CATransform3DMakeScale (1.0f, 1.0f,0.0f)]];
[anim setAutoreverses:YES];
[anim setRepeatCount:HUGE_VALF];
[[gradientView layer] addAnimation:anim];
不幸的是,这看起来像扩张和收缩而不是脉冲,我想(虽然我没有尝试过)。
我认为如果你想在此时使用渐变进行真正的脉冲,你可能需要使用自己的计时器手动完成动画。只需重新绘制,即可随时更改内半径值。啊。我并不完全确定这是唯一的方法,但我还没有看到手机上带有渐变的引人注目的脉冲动画。
我想在某个方面尝试另外一个想法。核心动画现在允许动画任意属性/值。理论上,您可以使用您命名的任意键路径(例如innerRadius)设置动画,并覆盖-drawLayerInContext委托方法。然后你可以在presentationLayer中获取当前值,而它在飞行途中并在那里重新绘制渐变。这只是理论上的,因为我没有尝试过,但似乎值得研究。
最好的问候。