2012-04-10 4 views
7

Pasé una gran cantidad de tiempo averiguando cómo determinar si mi NSWindow está en modo de pantalla completa o no y también cómo habilitarlo/deshabilitarlo para que entre o salga del modo de pantalla completa. Esto es útil cuando estoy animando una vista a otra vista o haciendo algo donde entrar o salir del modo de pantalla completa mete todo. Algo así como bloquear una ventana para que no se cambie de tamaño.HOWTO: ¿NSWindow está en modo FullScreen (Lion) Y está habilitando/deshabilitando?

La respuesta a esto se publica a continuación.

Respuesta

10

Para cualquier persona interesada aquí hay algunos métodos que puede categorizar o usar tal cual. Pasé algún tiempo buscando la manera de hacer esto y pensé que puede ayudar a alguien más:

Ésta le dirá si está o no está en modo de pantalla completa:

@implementation MyWindow 

- (void) setStyleMask:(NSUInteger)styleMask { 

    MyWindowController *wndController = (MyWindowController *)self.windowController; 
    wndController.fullScreenMode = (styleMask & NSFullScreenWindowMask); 
    [super setStyleMask:styleMask]; 
} 

@end 

estoy fijando una propiedad en mi controlador de ventana.

Para completar esto es lo que la categoría de NSWindow se vería así:

@implementation NSWindow (CategoryNSWindow) 

#pragma mark - Full Screen Mode: 

- (BOOL) inFullScreenMode { 

    return (self.styleMask & NSFullScreenWindowMask); 
} 

@end 

Estos dos métodos activar/desactivar la capacidad de ir hacia o desde el modo de pantalla completa:

- (void) enableFullScreen { 

    NSWindowCollectionBehavior behavior = [self.window collectionBehavior]; 
    behavior |= NSWindowCollectionBehaviorFullScreenPrimary; 
    [self.window setCollectionBehavior:behavior]; 
} 

- (void) disableFullScreen { 

    NSWindowCollectionBehavior behavior = [self.window collectionBehavior]; 
    behavior ^= NSWindowCollectionBehaviorFullScreenPrimary; 
    [self.window setCollectionBehavior:behavior]; 
} 

Cambie el nombre de los métodos como lo desee.

2

Hay dos acontecimientos de NSWindowDelegate

  • DidWindowEnterFullScreen
  • DidWindowExitFullScreen

    que le ayudan a resolver su problema.

+0

verdadera esas son como las notificaciones, pero lo que se presenta es una manera de saber en tiempo real. Además, no estoy seguro de que sepas esto, pero si capturas windowWillEnterFullScreen, entonces también tienes que implementar el otro delegado para willUseFullScreenContentSize: Es un poco molesto si me preguntas. – Arvin

1

Los dos eventos de NSWindowDelegate son:

– windowDidEnterFullScreen: 
– windowDidExitFullScreen: 
Cuestiones relacionadas