2011-07-25 12 views
13

Supongo que debería verificar si [NSApplication presentationOptions] contiene NSFullScreenModeApplicationPresentationOptions, pero ¿cómo logro eso?¿Cómo saber si una NSWindow es a pantalla completa en Mac OS X Lion?

EDITAR: usar [NSApplication presentationOptions] no funciona, ya que en mi aplicación basada en documentos puede haber algunos documentos en pantalla completa y otros no. Ahora estoy buscando otra solución. Me pregunto por qué no hay una propiedad llamada o algo así.

Respuesta

30

Estaba buscando una solución yo mismo y basándome en la respuesta de Matthieu, creé una categoría en NSWindow que funciona bien para mí.

@interface NSWindow (FullScreen) 

- (BOOL)mn_isFullScreen; 

@end 

@implementation NSWindow (FullScreen) 

- (BOOL)mn_isFullScreen 
{ 
    return (([self styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask); 
} 

@end 
10

Necesita utilizar un operador bit a bit & para probar que esa opción se está utilizando. No se ha probado, pero probablemente algo como esto:

- (BOOL) inFullScreenMode { 
    NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions]; 
    if (opts & NSApplicationPresentationFullScreen) { 
     return YES; 
    } 
    return NO; 
} 

para ver si alguno de sus ventanas están en modo de pantalla completa, simplemente comprobar la máscara de estilo de la ventana.

NSUInteger masks = [someNSWindow styleMask] 
if (masks & NSFullScreenWindowMask) { 
// Do something 
} 
+0

Gracias, esto es exactamente lo que necesitaba. Solo una corrección: use 'NSApp' en lugar de' NSApplication', de lo contrario recibirá una advertencia. Oh ... y, por supuesto, '- (BOOL) inFullScreenMode()' debe escribirse como '- (BOOL) en FullScreenMode'. – Nickkk

+0

Desafortunadamente, ahora hay otro problema: en mi aplicación basada en documentos, el uso de la solución anterior no funcionará, ya que algunos de los documentos pueden ser de pantalla completa y otros no. ¿Alguna otra solución? – Nickkk

+0

Simplemente verifique las máscaras de estilo de todas sus ventanas. He agregado un código de muestra. –

2

para SWIFT 3,0

if let window = NSApp.mainWindow { 
    let isWindowFullscreen = window.styleMask.contains(NSFullScreenWindowMask) 
} 

Obviamente, la pregunta original, que le sustituya NSApp.mainWindow con cualquier ventana de documento que está queriendo comprobar.