2013-01-08 6 views
5

Ich habe ein NSWindow, das jede Sekunde aktualisiert wird, um die aktuelle Uhrzeit anzuzeigen.Wie finde ich heraus, ob ein Teil eines NSWindows gerade sichtbar ist (nicht nur bestellt)?

Diese Zeichnung ist ziemlich prozessorintensiv und ich möchte vermeiden, es zu tun, während das Fenster vollständig durch andere Fenster verdeckt ist.

Leider zeigt [NSWindow isVisible] nicht, ob ein Fenster tatsächlich auf dem Bildschirm sichtbar ist, sondern nur, ob es momentan auf dem Bildschirm ist. Das heißt, wenn das Fenster in der Fensterliste ist, aber vollständig von anderen Fenstern verdeckt ist isVisible == YES, meine benutzerdefinierte drawRect wird aufgerufen und ich zeichne alles in einen Puffer, der nie benutzt wird.

Gibt es eine Möglichkeit zu erkennen, ob ein Fenster und sein Inhalt eigentlich auf dem Bildschirm sichtbar ist?

Jede Hilfe würde sehr geschätzt werden.

Antwort

4

Am 10.9 können Sie NSWindows -occlusionState und die zugehörige Delegate-Methode verwenden.

Aus den Release Notes:

Windows als verstopften, wenn ihre gesamte Inhalt, inklusive Titelleiste und Werkzeugleiste, 100% von einem anderen undurchsichtigen Fenster abgedeckt ist. Windows wird auch verdeckt, wenn sie außerhalb des Bildschirms bestellt, auf dem Dock oder auf einem anderen Speicherplatz minimiert werden. Teilverschluss zählt als

Beispiel „sichtbar.“:

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

Dank. Ich habe gesehen, dass in der API Änderungen .. lustig wie lange es dauerte, um diese API dort zu bekommen :-) –

Verwandte Themen