2012-04-10 12 views
7

Ho trascorso molto tempo a capire come determinare se la mia NSWindow è in modalità a schermo intero oppure no e anche come abilitare/disabilitare la modalità a schermo intero. Questo è utile quando sto animando una vista a un'altra vista o facendo qualcosa in cui entrare o uscire dalla modalità a schermo intero rovinerà tutto. Un po 'come bloccare una finestra per essere ridimensionata.HOWTO: NSWindow In modalità FullScreen (Lion) E Abilitazione/disabilitazione?

La risposta a questo è pubblicata di seguito.

risposta

10

Per chiunque sia interessato ecco alcuni metodi che è possibile classificare o utilizzare così com'è. Ho trascorso qualche tempo alla ricerca di come fare questo e ho pensato che può aiutare qualcun altro fuori:

Questo vi dirà se siete o non siete in modalità a schermo intero:

@implementation MyWindow 

- (void) setStyleMask:(NSUInteger)styleMask { 

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

@end 

Io sono la creazione di un proprietà nel mio controller di finestra.

Per completezza qui è quello che la categoria sulla NSWindow sarebbe simile:

@implementation NSWindow (CategoryNSWindow) 

#pragma mark - Full Screen Mode: 

- (BOOL) inFullScreenMode { 

    return (self.styleMask & NSFullScreenWindowMask); 
} 

@end 

Questi due metodi saranno abilitare/disabilitare la capacità di andare dentro o fuori modalità a schermo intero:

- (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]; 
} 

Rinominare i metodi come preferisci.

2

ci sono due eventi di NSWindowDelegate

  • DidWindowEnterFullScreen
  • DidWindowExitFullScreen

    che aiutano a risolvere il problema.

+0

vero quelli sono come le notifiche, ma quello che ho presentato è un modo in tempo reale di conoscere. Inoltre non sono sicuro che tu lo sappia, ma se acquisisci windowWillEnterFullScreen devi anche implementare l'altro delegato per willUseFullScreenContentSize: è una specie di dolore se me lo chiedi. – Arvin

1

I due eventi di NSWindowDelegate sono:

– windowDidEnterFullScreen: 
– windowDidExitFullScreen: