我的整个应用使用touchesMoved
进行绘制(Coregraphics)。我应该从[self setNeedsDisplay]
内拨打touchesMoved
而不是在那里执行绘图代码吗?这会阻止我遇到的一些延迟吗?在发布之前我没有尝试这个的唯一原因是因为我需要花费几个小时才能将所有绘图转换为drawRect
,我想知道它是否比绘制{{{{{{ 1}}?
答案 0 :(得分:3)
是。您应始终将绘图保留在drawRect中,并使用setNeedsDisplay触发实际绘图。这是在Cocoa Touch中呈现视图的关键。
例如,如果您没有使用此方法,则可能会在多个方法中将绘图代码分散在您的类中。此外,这还可确保您的绘图代码在渲染周期中仅执行一次。本质上,调用setNeedsDisplay会触发一个失效标志,让你的UIView知道重绘自己。如果没有这个,您可能会执行因渲染周期而实际不需要的额外绘制操作。
答案 1 :(得分:1)
您不应该在UI回调中绘图。它会减慢或冻结UI响应速度,如果你想直接绘制到UIView中,你将没有正确的绘图上下文。
而是将以后绘制所需的信息保存,计划或排队到您自己的位图绘图上下文中,或者在该视图的drawRect回调期间。
根据所需的帧速率,您甚至不需要在每个touchesMoved事件上执行setNeedsDisplay,但可以对数据进行排队并为动画速率计时器或CADisplayLink回调设置标志,以便以更恒定的速率执行setNeedsDisplay (比如说每秒只有15或30帧)。这也有助于消除额外的绘图操作。