2013-03-01 83 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