2013-01-08 14 views
5

Ho una NSWindow che viene aggiornata ogni secondo per visualizzare l'ora corrente.Come scoprire se una parte di una NSWindow è attualmente visibile (non solo ordinata)

Questo disegno è piuttosto intensivo del processore e voglio evitare di farlo mentre la finestra è completamente oscurata da altre finestre.

Sfortunatamente, [NSWindow isVisible] non mostra se una finestra è effettivamente visibile sullo schermo, ma solo se è sullo schermo al momento. Significato se la finestra è nella lista delle finestre ma completamente oscurata da altre finestre isVisible == YES, il mio drawRect personalizzato viene chiamato e finisco per disegnare tutto in un buffer che non viene mai usato.

C'è un modo per rilevare se una finestra e il suo contenuto sono effettivamente visibili sullo schermo?

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

4

Su 10.9 è possibile utilizzare -occlusionState di NSWindow e il metodo delegato associato.

Dalle note di rilascio:

di Windows sono considerati occluso se tutto il loro contenuto, tra cui barra del titolo e barra degli strumenti, è al 100% coperta da un'altra finestra opaca. Le finestre sono anche occluse se ordinate fuori dallo schermo, ridotte al minimo sul dock o su un altro spazio. conta parziale occlusione come

Esempio “visibile”.:

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

Grazie. L'ho visto nelle modifiche API .. divertente quanto tempo ci è voluto per ottenere quell'API lì dentro :-) –

Problemi correlati