我正在编写一个应用程序,我正在绘制一个NSView。在mouseDown
我将保存数据模型中的位置,然后在视图的drawRect
方法中的该位置绘制图形。一切正常。
在mouseDown
结束时,我正在呼叫[self setNeedsDisplay:YES];
强制重绘。唯一的问题是dirtyRect
始终是视图的完整大小。我想尽可能地优化它,这样我就不会重新绘制整个窗口只需几个像素。
所以现在我正在调用[self drawRect:...]
而是指定矩形。
现在我的drawRect
我正在比较每个图形,看它是否属于dirtyRect。看起来我已经交易了绘图工作的边界检查一切。我不确定我的效率是多少或更低。
那么标准做法是什么?重新绘制视图中的所有内容并忽略dirtyRect是否常见? 是否有一个很好的函数我可以用作测试来查看我的对象是否在dirtyRect
?
答案 0 :(得分:4)
如果您正在尝试绘制屏幕,则不应自己致电-drawRect:
。让AppKit为您调用它。您应该做的是在-setNeedsDisplayInRect:
结束时致电-mouseDown:
。
然后,在-drawRect:
中,只绘制dirtyRect
中包含的内容。您可以使用NSPointInRect()
测试一个点是否在dirtyRect内。使用NSRect还有许多其他有用的功能。请参阅the point functions和the rectangle functions的文档。