用石英连续绘图?逐帧可能吗?

时间:2012-04-14 13:06:28

标签: iphone ipad core-graphics quartz-2d

我一直在UIView子类中使用drawRect处理自定义绘图。这很酷,但你必须等到运行循环结束才能调用drawRect,我想知道你如何控制逐帧动画,你可以随着时间的推移改变图纸,或者这是否可能?也许Quartz并不是真的设计用于这种类型的动画图形?我认为它可能是为那些不经常变化的静态图纸而设计的。

2 个答案:

答案 0 :(得分:2)

Quartz本身无法维持高帧率,因为每次都需要重绘所有内容。但是你可以让Quartz与CoreAnimation一起工作,以获得基于Quartz的动画。这背后的想法是,您可以在CALayer对象中缓存先前绘制的内容,然后使用CoreAnimation创建连续绘图效果。

可以在AccelerometerGraph sample code provided by Apple中看到这种技术的一个很好的例子。在此示例中,使用此技术的UIView子类是“GraphView”对象。基本上,此对象仅绘制图形的一部分(新生成的片段),将其备制在专用图层中,然后为图层设置动画以提供“滚动图形”动画。

显然,只有当您完全控制绘图元素并且可以管理在屏幕中添加对象的增量方式时,此技术才有效。当然,当您必须重绘屏幕的许多不同部分并且需要修改以前生成的图层时,事情会变得复杂得多。

无论如何看看上面提到的代码:它非常有趣。

答案 1 :(得分:1)

您的应用应在每帧之前退出运行循环。在每个帧之间设置所有自定义帧动画。因此,drawRect中的逐帧绘制应该可以正常工作。这可以在iOS应用程序中以60 Hz的帧更新速率运行,而不仅仅适用于静态视图,只要帧时间之间的所有方法以及drawRects都足够快。如果需要,请将它们剁碎。