2013-03-01 46 views
1

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

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

所以现在我打电话[self drawRect:...]而不是指定矩形。

现在在我的drawRect我比较每个图形,我必须看它是否落入dirtyRect。看来我已经把绘图工作交给了边界检查工作。我不确定我是否已经使其效率更高或更低。

那么标准做法是什么?只重绘视图中的所有内容并忽略dirtyRect常见?有没有一个很好的功能,我可以用它来测试我的对象是否在dirtyRect

回答

4

如果您尝试绘制到屏幕上,则不应该自己拨打-drawRect:。让AppKit为您打电话。你应该做的是在你的-mouseDown:结束时致电-setNeedsDisplayInRect:

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

+0

谢谢,这是我一直在寻找的信息。 – spartygw 2013-03-02 01:22:56