2012-04-10 13 views
7

Spędziłem dużo czasu zastanawiając się, jak określić, czy mój NSWindow jest w trybie pełnoekranowym, czy też nie, a także jak włączyć/wyłączyć go z wchodzenia lub wychodzenia z trybu pełnoekranowego. Jest to przydatne, gdy animuję widok do innego widoku lub robię coś, w którym wchodzenie lub wychodzenie z trybu pełnoekranowego powoduje bałagan. Trochę jak blokowanie okna przed zmianą rozmiaru.HOWTO: Czy program NSWindow jest w trybie pełnego ekranu (lew) i włączanie/wyłączanie?

Odpowiedź na to jest zamieszczona poniżej.

Odpowiedz

10

Dla wszystkich zainteresowanych tutaj są niektóre metody, które można kategoryzować lub używać w obecnej formie. Spędziłem trochę czasu na poszukiwanie, jak to zrobić i myśli może pomóc komuś innemu się:

To jeden powie, jeśli jesteś lub nie jesteś w trybie pełnoekranowym:

@implementation MyWindow 

- (void) setStyleMask:(NSUInteger)styleMask { 

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

@end 

ja ustawienie właściwość w moim kontrolerze okien.

Dla kompletności Oto co kategoria na NSWindow wyglądałby następująco:

@implementation NSWindow (CategoryNSWindow) 

#pragma mark - Full Screen Mode: 

- (BOOL) inFullScreenMode { 

    return (self.styleMask & NSFullScreenWindowMask); 
} 

@end 

Te dwie metody będzie włączyć/wyłączyć możliwość, aby przejść do lub z trybu pełnoekranowego:

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

Zmień nazwy metod, jak chcesz.

2

Istnieją dwa wydarzenia NSWindowDelegate

  • DidWindowEnterFullScreen
  • DidWindowExitFullScreen

    które pomogą Ci rozwiązać problem.

+0

prawda te są jak zgłoszeń, ale to, co przedstawiane jest sposobem poznania czasie rzeczywistym. Również nie jesteś pewien, czy to wiesz, ale jeśli przechwycisz windowWillEnterFullScreen, musisz również zaimplementować drugiego delegata dla willUseFullScreenContentSize: To trochę bolesne, jeśli mnie zapytasz. – Arvin

1

Oba wydarzenia NSWindowDelegate są:

– windowDidEnterFullScreen: 
– windowDidExitFullScreen: 
Powiązane problemy