HOWTO:NSWindow是否处于全屏模式(Lion)并启用/禁用?

时间:2012-04-10 21:11:33

标签: objective-c osx-lion fullscreen nswindow

我花了很多时间搞清楚如何确定我的NSWindow是否处于全屏模式,以及如何启用/禁用它进入或退出全屏模式。当我将视图设置为另一个视图的动画或执行某些进入或退出全屏模式的内容时,这非常有用。有点像锁定窗口的大小。

答案如下:

3 个答案:

答案 0 :(得分:10)

对于任何对此感兴趣的人,您可以按原样分类或使用某些方法。我花了一些时间寻找如何做到这一点,并认为它可以帮助其他人:

这个会告诉你你是否处于全屏模式:

@implementation MyWindow

- (void) setStyleMask:(NSUInteger)styleMask {

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

@end

我在我的窗口控制器中设置了一个属性。

为了完整性,这里是NSWindow的类别:

@implementation NSWindow (CategoryNSWindow)

#pragma mark - Full Screen Mode:

- (BOOL) inFullScreenMode {

    return (self.styleMask & NSFullScreenWindowMask);
}

@end

这两种方法将启用/禁用进入或退出全屏模式的功能:

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

根据需要重命名方法。

答案 1 :(得分:2)

NSWindowDelegate

有两个事件
  • DidWindowEnterFullScreen
  • DidWindowExitFullScreen

    可以帮助您解决问题。

答案 2 :(得分:1)

NSWindowDelegate的两个事件是:

– windowDidEnterFullScreen:
– windowDidExitFullScreen: