在NSView drawRect中高效绘图

时间:2013-03-01 20:40:38

标签: macos cocoa nsview quartz-graphics drawrect

我正在编写一个应用程序,我正在绘制一个NSView。在mouseDown我将保存数据模型中的位置,然后在视图的drawRect方法中的该位置绘制图形。一切正常。

mouseDown结束时,我正在呼叫[self setNeedsDisplay:YES];强制重绘。唯一的问题是dirtyRect始终是视图的完整大小。我想尽可能地优化它,这样我就不会重新绘制整个窗口只需几个像素。

所以现在我正在调用[self drawRect:...]而是指定矩形。

现在我的drawRect我正在比较每个图形,看它是否属于dirtyRect。看起来我已经交易了绘图工作的边界检查一切。我不确定我的效率是多少或更低。

那么标准做法是什么?重新绘制视图中的所有内容并忽略dirtyRect是否常见? 是否有一个很好的函数我可以用作测试来查看我的对象是否在dirtyRect

1 个答案:

答案 0 :(得分:4)

如果您正在尝试绘制屏幕,​​则不应自己致电-drawRect:。让AppKit为您调用它。您应该做的是在-setNeedsDisplayInRect:结束时致电-mouseDown:

然后,在-drawRect:中,只绘制dirtyRect中包含的内容。您可以使用NSPointInRect()测试一个点是否在dirtyRect内。使用NSRect还有许多其他有用的功能。请参阅the point functionsthe rectangle functions的文档。

相关问题