1

我的整个应用程序touchesMoved用于绘图(Coregraphics)。我应该[self setNeedsDisplay]从内部调用touchesMoved而不是在那里执行绘图代码吗?这会阻止我正在经历的一些滞后吗?我在发布之前没有尝试这个的唯一原因是因为我需要几个小时才能将所有绘图转换为内部drawRect,我想知道它是否比绘图更有效touchesMoved

4

2 回答 2

3

是的。您应该始终将绘图保留在 drawRect 中并使用 setNeedsDisplay 来触发实际绘图。这是在 Cocoa Touch 中渲染视图的关键。

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

于 2011-10-01T16:36:26.077 回答
1

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

而是将绘制所需的信息保存、调度或排队以供以后使用,或者在您自己的位图绘制上下文中,或者在该视图的 drawRect 回调期间。

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

于 2011-10-01T20:07:53.367 回答