2009-11-30 37 views
3

我是iPhone开发新手,现在正在重新创建我为Silverlight开发的图表工具。你可以在iPhone中使用Quartz来创建渐变效果吗?

目前,我正在使用渐变来“填充”表示图表内条形的矩形。是否可以为此渐变设置动画效果,以便在用户触摸图表中的栏时更改颜色。

我查看了Apple提供的Core Animation指南,但无法看到目标渐变的属性。我想我可以使用一个转换在两个rects之间淡入淡出,其中一个有我的起始渐变,第二个有“被触摸”的版本,但是这意味着显然会为每个小节绘制多个rect对象,并且我会承担额外的性能开销。

任何想法?

回答

11

是的,的确,您可以使用Core Animation为动画渐变效果。

在3.0中出现的CAGradientLayer类具有一个很好的API,用于将渐变渲染到图层中,并且动画颜色和颜色停止更改也是如此。

I did a post on this class稍后回来,还有一些示例代码链接在底部。

在示例中,我通过构建CABasicAnimation为渐变创建动画,但只需将新颜色数组传递给渐变图层的colors属性即可隐式设置变化。除非你有理由不使用隐式动画。

检查一下,让我知道你是否有任何特定的问题,你想尝试动画的用户界面。

+0

感谢乔 - 它现在正按照计划完成工作。 有点难倒,因为我不知道你必须设置图层的框架。花了很多时间看空白视图,直到我意识到我的渐变图层的尺寸为0,0,0,0 ... 如果您有时间,我确实有一个问题 - 是否可以绘制路径每层内?我正在尝试在每个酒吧周围添加一个笔划。我所能做的就是在主视图上添加一个笔划,而不是添加到每个图层。我认为这是因为绘图上下文被设置为UIView,而不是图层,但我无法找到移动上下文的方法... – 2009-12-03 10:22:17

+0

是的,绝对。实际上,图层更适合用于渲染类似的东西。 CALayer具有cornerRadius,borderColor,borderWidth,backgroundColor等内置属性。因此,设置一堆图层并为每个图层指定不同的视觉属性非常简单,而不必使用图形上下文。检查CALayer文档的这些属性。 http://j.mp/6ad0fi 如果你想在图层内进行自定义Quartz绘图,你可以继承这个图层并实现-drawInContext:或者设置一个实现了-drawLayer:inContext的委托: – 2009-12-04 20:07:22

相关问题