2013-01-08 22 views
5

我有一個NSWindow,每秒更新一次以顯示當前時間。如何找出是否NSWindow的任何部分目前可見(不只是訂購)

這張圖是相當處理器密集的,我想避免這樣做,而窗口是完全被其他窗口遮蔽。

不幸的是,[NSWindow isVisible]沒有顯示窗口是否在屏幕上實際可見,而只顯示目前屏幕上是否爲。這意味着如果窗口在窗口列表中,但被其他窗口完全遮擋,isVisible == YES,我的自定義drawRect被調用,並最終將所有內容繪製到永不使用的緩衝區中。

是否有任何方法檢測窗口及其內容是否爲實際上在屏幕上可見?

任何幫助將不勝感激。

回答

4

在10.9上,您可以使用NSWindow的-occlusionState和關聯的委託方法。

從發行說明:

的Windows被認爲是閉塞的,如果他們的全部內容,包括標題欄和工具欄,是100%由其他不透明的窗口所覆蓋。如果Windows被屏幕排序,最小化到碼頭或其他空間,Windows也會被遮擋。部分遮擋算作

示例「可見」:

- (void)windowDidChangeOcclusionState:(NSNotification *)notification 
{ 
    if ([[notification object] occlusionState] & NSWindowOcclusionStateVisible) { 
     // visible 
    } else { 
     // occluded 
    } 
} 
+0

感謝。我確實在API的變化中看到了這一點。有趣的是,在那裏獲得該API需要多長時間:-) –

相關問題