2013-01-08 16 views
5

Mam NSWindow, który jest aktualizowany co sekundę, aby wyświetlić aktualny czas.Jak sprawdzić, czy jakakolwiek część NSWindow jest obecnie widoczna (nie tylko w zamówieniu)?

Ten rysunek jest dość intensywny procesor i chcę tego uniknąć, gdy okno jest całkowicie zasłonięte przez inne okna.

Niestety, [NSWindow isVisible] nie pokazuje, czy okno jest faktycznie widoczne na ekranie, ale tylko czy jest to obecnie na ekranie. Znaczenie, jeśli okno znajduje się na liście okien, ale jest całkowicie zasłonięte przez inne okna toVisible == YES, mój niestandardowy drawRect zostaje wywołany i kończę rysowanie wszystkiego w buforze, który nigdy nie jest używany.

Czy jest jakiś sposób na wykrycie, czy okno i jego zawartość jest faktycznie widoczne na ekranie?

Każda pomoc będzie mile widziana.

Odpowiedz

4

W wersji 10.9 można użyć opcji NSocindow -occlusionState i powiązanej metody delegatów.

Od release notes:

Windows są uważane niedrożny jeśli cała ich zawartość, w tym pasku tytułowym i paska narzędzi, jest w 100% objęte przez inną nieprzezroczystej okna. Okna są również zamknięte, jeśli są uporządkowane poza ekranem, zminimalizowane do stacji dokującej lub na innym obszarze. Częściowe liczy okluzji

przykład „widoczny”.:

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

dzięki. Widziałem to w zmianach API .. zabawne, ile czasu zajęło wprowadzenie tam API :-) –

Powiązane problemy