核心图形绘制比使用核心图形移动更有效吗?

问题描述:

我的整个应用程序使用touchesMoved绘图(Coregraphics)。我应该在touchesMoved之内拨打[self setNeedsDisplay],而不是在那里执行绘图代码?这会阻止我正在经历的一些延迟吗?我之前没有尝试过的唯一原因是因为它将花费我几个小时将所有绘图转换为drawRect,我想知道它是否比绘制touchesMoved更高效?核心图形绘制比使用核心图形移动更有效吗?

是的。您应始终将绘图保存在drawRect中,并使用setNeedsDisplay触发实际绘图。这是在Cocoa Touch中呈现视图的关键。

例如,如果您没有使用此方法,您可能会在多个方法中分散您的类的绘图代码。此外,这还确保您的绘图代码在渲染周期中仅执行一次。基本上,调用setNeedsDisplay会触发一个失效标志,让你的UIView知道重绘自己。没有这个,你可能会执行额外的绘图操作,由于渲染周期而实际上并不需要。

您不应该在UI回调中进行绘制。它会减慢或冻结UI响应,如果你想直接绘制到UIView中,你将没有合适的绘制上下文。

取而代之,保存,安排或排队绘制所需的信息,以便将其绘制到您自己的位图绘制上下文中或在该视图的drawRect回调期间。

根据所需的帧速率,许多人甚至不需要在每个touchesMoved事件上执行setNeedsDisplay,但可以对数据进行排队,并为动画速率计时器或CADisplayLink回调设置标志,以更加恒定地执行setNeedsDisplay速率(比如说每秒只有15或30帧)。这也将有助于消除额外的绘图操作。