2011-07-03 58 views
1

我有一個NSView的子視圖。我希望能夠重畫子視圖(調用它的drawRect)而不重繪父視圖。那可能嗎?NSView - 如何重繪子視圖,而不重繪父視圖

當我在他的子視圖中設置了setNeedsDisplay時,父視圖的drawRect也被調用。

+0

除了NSResponder的答案,我會說:「當您的重繪時,父視圖所做的事情[應該是]與您無關。」這是您與Cocoa簽訂的圖紙合同。如果父視圖是您自己的類之一,請發佈其相關的圖形代碼並要求提供優化建議。 –

+0

父視圖和子視圖都是我自己的視圖。我實現了他們的drawRect方法。大多數時候父母保持不變,只有子視圖發生變化。出於這個原因,我只想要子視圖的drawRect方法被稱爲 –

+1

問題是,你的子視圖沒有業務告訴你的超級看法做什麼。超級視圖需要處理自己的東西,並在系統告訴它它是必要的時候繪製。避免的一種方法是遵循NSResponder的建議,如果你的子視圖確實是不透明的。但是,如果它們之間存在透明度層,超級視圖當然需要重繪至少該區域。 –

回答

4

您可以做的一件事情是減少不必要的繪圖,並覆蓋-isOpaque並返回YES。

當然,你只應該這樣做,如果子視圖實際上是不透明的。

+0

這是什麼意思,子視圖是不透明的? –

+1

您也可以簡單地將不透明屬性設置爲YES。不需要覆蓋該方法。不透明意味着「不透明」。 –

+0

這樣做的結果是什麼? –