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

3

我刚开始接触iPhone开发,目前正在尝试重新创建一个我为Silverlight开发的图表工具。

目前,我使用渐变来“填充”图表中表示柱状条的矩形。当用户触摸图表中的柱状条时,是否可能对此渐变进行动画处理,使其改变颜色呢?

我已经查看了苹果提供的Core Animation指南,但找不到可针对渐变进行操作的属性。我想我可以使用转换来淡入淡出两个矩形,其中一个具有我的起始渐变效果,而第二个则具有“被触摸”版本,但这意味着必须为每个柱状条绘制多个矩形对象,这将带来额外的性能开销。

有什么好的想法吗?

1个回答

11

没错,你可以使用Core Animation来制作渐变动画。

CAGradientLayer类是3.0版本后推出的,它提供了一个很好的API,可以将渐变渲染到图层中,并且还可以动态地改变颜色和颜色停止位置。

我之前写过一篇关于这个类的博客文章,底部链接附有一些样例代码。

在这个样例中,我通过创建CABasicAnimation来实现渐变动画,但你也可以通过直接向渐变图层的颜色属性传递一个新的颜色数组来隐式地实现动画效果。除非有特殊原因,建议使用隐式动画。

请查看示例并告诉我如果你有任何关于你要实现的UI方面的问题。


谢谢Joe - 现在它正按计划工作。我有点困惑,因为我不知道你必须设置层的框架。花了很多时间看着一个空白视图,直到我意识到我的渐变层的尺寸为0,0,0,0...如果您有时间,我确实有一个问题要问您 - 是否可以在每个层中绘制路径?我正在尝试在每个条形图周围添加描边。我能做的只是在主视图上添加一个矩形描边,而不是在每个层上添加描边。我认为这是因为绘图上下文设置为UIView而不是层,但我找不到移动上下文的方法... - Carl Hovland
是的,绝对没错。对于渲染任何类似的东西,使用图层实际上更加方便。CALayer具有内置属性,如cornerRadius、borderColor、borderWidth、backgroundColor等。因此,可以轻松设置一堆图层,并为每个指定不同的视觉属性,而无需使用图形上下文。请查看CALayer文档以获取这些属性。http://j.mp/6ad0fi 如果您想在图层内部进行自定义Quartz绘制,则可以子类化该图层并实现-drawInContext:或设置实现-drawLayer:inContext:的委托。 - Joe Ricioppo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接