3

我想为径向渐变设置动画以缩小和扩大内半径,就好像它在脉动一样。

现在我正在用 CGGradient 渲染渐变,但我不确定如何为它设置动画。我看过这个话题

你可以在 iPhone 中使用 Quartz 制作渐变动画吗?

这解释了如何使用 CAGradientLayer 对线性渐变进行动画处理,但这似乎不会绘制径向渐变。

有没有一种简单的方法来为 CGGradient 设置动画,或者有什么方法可以创建径向渐变 CAGradientLayer?

任何想法表示赞赏。

4

1 回答 1

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];

不幸的是,我认为这看起来更像是膨胀和收缩而不是脉动(尽管我还没有尝试过)。

我认为如果此时你想要一个真正的渐变脉冲,你可能必须使用自己的计时器手动制作动画。只需在您进行时定期重新绘制更改您的内半径值。啊。我不确定这是唯一的方法,但我还没有在手机上看到你想要的带有渐变的引人注目的脉冲动画。

我想在某个时候尝试另一种想法。Core Animation 现在允许为任意属性/值设置动画。理论上,您可以使用您命名的任意键路径(例如,innerRadius)设置动画并覆盖 -drawLayerInContext 委托方法。然后你可以在它处于飞行途中时从presentationLayer中获取当前值,并在那里重新绘制你的渐变。这只是理论上的,因为我没有尝试过,但似乎值得研究。

最好的祝福。

于 2010-06-11T18:32:32.977 回答