1

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

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

所以现在我[self drawRect:...]改为调用并指定矩形。

现在drawRect我正在比较每个图形,我必须看看它是否属于dirtyRect。似乎我已经将绘图工作换成了边界检查工作。我不确定我是否提高或降低了效率。

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

4

1 回答 1

4

-drawRect:如果你想在屏幕上画画,你永远不应该打电话给自己。让 AppKit 为您调用它。你应该做的是-setNeedsDisplayInRect:在你的-mouseDown:.

然后,在 中-drawRect:,只绘制包含在dirtyRect. 您可以使用NSPointInRect(). NSRect 还有很多其他有用的功能。请参阅点函数矩形函数的文档。

于 2013-03-01T21:40:47.737 回答