2012-04-10 10 views
7

Ich habe viel Zeit damit verbracht, herauszufinden, wie ich feststellen kann, ob sich mein NSWindow im Vollbildmodus befindet oder nicht, und auch, wie er den Vollbildmodus ein- oder ausschalten kann. Dies ist nützlich, wenn ich eine Ansicht in eine andere Ansicht animiere oder etwas mache, bei dem das Wechseln in den Vollbildmodus oder das Verlassen des Vollbildmodus zu Problemen führt. So, als würde man ein Fenster daran hindern, seine Größe zu ändern.HOWTO: Ist NSWindow im Vollbildmodus (Lion) UND Aktivieren/Deaktivieren?

Die Antwort dazu finden Sie unten.

Antwort

10

Hier finden Sie einige Methoden, die Sie kategorisieren oder verwenden können. Ich verbrachte einige Zeit suchen, wie dies zu tun und dachte, es jemand anderes helfen kann:

Dieser wird Ihnen sagen, wenn Sie sind oder nicht im Vollbildmodus:

@implementation MyWindow 

- (void) setStyleMask:(NSUInteger)styleMask { 

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

@end 

Ich gründe ein Eigenschaft in meinem Fenstercontroller.

Denn hier Vollständigkeit ist, was die Kategorie auf NSWindow aussehen würde:

@implementation NSWindow (CategoryNSWindow) 

#pragma mark - Full Screen Mode: 

- (BOOL) inFullScreenMode { 

    return (self.styleMask & NSFullScreenWindowMask); 
} 

@end 

Diese beiden Methoden werden die Fähigkeit aktivieren/deaktivieren in oder aus dem Vollbildmodus zu gehen:

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

Benenne die Methoden wie du willst.

2

Es gibt zwei Ereignisse von NSWindowDelegate

  • DidWindowEnterFullScreen
  • DidWindowExitFullScreen

    , die Sie Ihr Problem lösen helfen.

+0

Wahren diejenigen, die wie Benachrichtigungen sind, aber was ich dargestellt ist eine Echtzeit Möglichkeit zu wissen. Auch nicht sicher, ob Sie das wissen, aber wenn Sie windowWillEnterFullScreen erfassen, dann müssen Sie auch den anderen Delegierten für willUseFullScreenContentSize implementieren: Es ist ein bisschen Schmerz, wenn Sie mich fragen. – Arvin

1

Die beiden Ereignisse von NSWindowDelegate sind:

– windowDidEnterFullScreen: 
– windowDidExitFullScreen: