2013-01-08 1 views
5

現在の時刻を表示するために毎秒更新されるNSWindowがあります。NSWindowの一部が現在表示されているかどうかを調べる方法(順序付けされているだけではありません)

この図は非常にプロセッサを大量に使用しているため、ウィンドウがで完全にが他のウィンドウで覆い隠されている間は、やりたくありません。

[NSWindow isVisible]は、ウィンドウが実際に画面に表示されているかどうかを表示しませんが、現時点ではが画面にあるかどうかのみを示します。意味は、ウィンドウがウィンドウリストにあるが、他のウィンドウによって完全に隠されている場合です。isVisible == YES、私のカスタムdrawRectが呼び出され、使用されていないバッファにすべて描画されます。

ウィンドウとその内容が実際にであるかどうかを検出する方法はありますか?実際にはが画面に表示されますか?

ご協力いただければ幸いです。

答えて

4

10.9では、NSWindowの-occlusionStateとそれに関連するデリゲートメソッドを使用できます。リリースノートから

:タイトルバーとツールバーなど、彼らの全体の内容は、別の不透明なウィンドウでカバー100%であれば

のWindowsは、閉塞と考えられています。また、画面から離れて注文したり、ドックに最小化したり、別の場所に置いたりすると、Windowsは閉塞されます。部分的な閉塞カウント

例「目に見える。」:

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

感謝。私はAPIの変更でそれを見た...面白いどのくらい、そこにそのAPIを取得するためにかかった:-) –

関連する問題