我一直在使用UIView子类中的drawRect进行自定义绘图。这很酷,但你必须等到run循环结束时才能调用drawRect,我想知道如何控制随着时间的推移更改绘图的逐帧动画,或者这是否可能?也许Quartz并不是真的为这种类型的动画设计的?我猜它可能是为不经常更改的静态绘图而设计的。
发布于 2012-04-14 21:31:53
石英本身不能维持高帧率,因为它需要每次重新绘制所有内容。但是您可以让Quartz与CoreAnimation协同工作,以获得基于Quartz的动画。这背后的想法是,您可以在CALayer对象中缓存以前绘制的内容,然后使用CoreAnimation创建连续绘制效果。
在AccelerometerGraph sample code provided by Apple中可以看到这种技术的一个很好的例子。在此示例中,使用此技术的UIView子类是"GraphView“对象。基本上,这个对象只绘制图形的一部分(新生成的片段)作为完全新的图形,将其放在一个专用的层中,然后对这些层进行动画处理,以便提供“滚动图形”动画。
显然,只有当您完全控制绘图元素并可以管理这种在屏幕中添加对象的增量方式时,此技术才有效。当然,当您必须重新绘制屏幕的许多不同部分,并且需要修改之前生成的层时,事情会变得复杂得多。
无论如何,请看一下上面提到的代码:它非常有趣。
发布于 2012-04-15 05:26:58
你的应用程序应该在每一帧之前退出运行循环。在每一帧之间执行所有自定义帧动画设置。因此,在drawRect中逐帧绘制应该可以很好地工作。这可以在iOS应用程序中以60 Hz的帧更新率工作,而不仅仅是静态视图,只要您在帧时间之间的所有方法以及drawRects足够快。如果需要的话,把它们切碎。
https://stackoverflow.com/questions/10153865
复制相似问题