2012-05-26 74 views
6

我希望在某個NSView- (NSRect)visibleRect發生更改時收到通知,因爲我想根據可見矩形做一些奇特的子視圖佈局。坦率地說,現在我很難過; -visibleRect不會發出KVO通知(這是有道理的),並且似乎沒有辦法在沒有明確地呼叫-visibleRect的情況下查明可見矩形是否改變。是否可以觀察-visibleRect

這是可能的嗎? (或者這是一個可怕的,可怕的想法?)

+1

爲什麼減號1? – Vervious

回答

6

我認爲你可以覆蓋-[NSView updateTrackingAreas]或收聽NSViewDidUpdateTrackingAreasNotification。這些可能發生在更多情況下,而不僅僅是可見矩形的改變,但是它們應該發生在可見矩形的任何改變上。我認爲。

這就是說,這可能是一個可怕的想法。很難知道。 :)

+0

可行,謝謝。 – Vervious

+0

好的問題和答案。這個答案幫助我擺脫了我面臨的另一個問題,但我也有這個問題。對於這個問題,我會投票答覆,但不接受它。 – trss

+0

'updateTrackingAreas'的文檔中提到「當視圖的幾何變化時需要重新計算其跟蹤區域時自動調用」。但不清楚視圖的幾何意味着什麼。 View Geometry有一個主題,但只解釋邊界和框架。它確實解釋了visibleRect,但它並沒有將其稱爲視圖的幾何體。 – trss

1

10.5的另一個選項是-viewWillDraw方法,它在繪製視圖(及其子視圖)之前被調用。您可以在調用[super viewWillDraw]之前獲取視圖的可見矩形並執行佈局。

0

肯的建議聆聽跟蹤區域的變化感覺hacky但似乎工作,雖然他們只在調整大小完成後觸發。如果您需要像調整大小時那樣需要更新,則重寫-[NSView resizeWithOldSuperviewSize:]將會這樣做

相關問題