我想为径向渐变设置动画以缩小和扩大内半径,就好像它在脉动一样。
现在我正在用 CGGradient 渲染渐变,但我不确定如何为它设置动画。我看过这个话题
你可以在 iPhone 中使用 Quartz 制作渐变动画吗?
这解释了如何使用 CAGradientLayer 对线性渐变进行动画处理,但这似乎不会绘制径向渐变。
有没有一种简单的方法来为 CGGradient 设置动画,或者有什么方法可以创建径向渐变 CAGradientLayer?
任何想法表示赞赏。
我想为径向渐变设置动画以缩小和扩大内半径,就好像它在脉动一样。
现在我正在用 CGGradient 渲染渐变,但我不确定如何为它设置动画。我看过这个话题
你可以在 iPhone 中使用 Quartz 制作渐变动画吗?
这解释了如何使用 CAGradientLayer 对线性渐变进行动画处理,但这似乎不会绘制径向渐变。
有没有一种简单的方法来为 CGGradient 设置动画,或者有什么方法可以创建径向渐变 CAGradientLayer?
任何想法表示赞赏。
如果手机上只有 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];
不幸的是,我认为这看起来更像是膨胀和收缩而不是脉动(尽管我还没有尝试过)。
我认为如果此时你想要一个真正的渐变脉冲,你可能必须使用自己的计时器手动制作动画。只需在您进行时定期重新绘制更改您的内半径值。啊。我不确定这是唯一的方法,但我还没有在手机上看到你想要的带有渐变的引人注目的脉冲动画。
我想在某个时候尝试另一种想法。Core Animation 现在允许为任意属性/值设置动画。理论上,您可以使用您命名的任意键路径(例如,innerRadius)设置动画并覆盖 -drawLayerInContext 委托方法。然后你可以在它处于飞行途中时从presentationLayer中获取当前值,并在那里重新绘制你的渐变。这只是理论上的,因为我没有尝试过,但似乎值得研究。
最好的祝福。