【问题标题】:Can I animate a radial gradient in iPhone?我可以在 iPhone 中为径向渐变设置动画吗?
【发布时间】:2010-06-11 17:34:55
【问题描述】:

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

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

Can you animate gradients using Quartz in an iPhone?

这解释了如何使用 CAGradientLayer 为线性渐变设置动画,但它似乎不会绘制径向渐变。

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

感谢任何想法。

【问题讨论】:

  • 在计时器上渲染图层?

标签: iphone animation radial-gradients


【解决方案1】:

如果手机上只有 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在飞行途中从它那里获取当前值,然后在那里重新绘制你的渐变。这只是理论上的,因为我没有尝试过,但似乎值得研究。

最好的问候。

【讨论】:

  • 你的第二个建议引起了我的兴趣,关于动画转换。我需要的渐变在外面是绿色的,在里面逐渐变透明。是否有可能有一个透明的羽毛圆圈来掩盖它下面的任何东西?如果这个透明的圆圈在一个大的绿色圆圈上跳动,我相信这会产生我正在寻找的那种效果。
  • Core Animation 的遮罩有点棘手。图层有一个 mask 属性,您可以设置它并且它是可动画的。由于您使用图层作为遮罩属性,因此您可能也可以为其属性设置动画。
猜你喜欢
  • 1970-01-01
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多