1

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

4

2 回答 2

2

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

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

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

不管怎样,看看上面提到的代码:这很有趣。

于 2012-04-14T13:31:52.570 回答
1

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

于 2012-04-14T21:26:58.103 回答