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

Arv*_*vin 7 objective-c fullscreen nswindow osx-lion

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

答案如下.

Arv*_*vin 10

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

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

@implementation MyWindow

- (void) setStyleMask:(NSUInteger)styleMask {

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

@end
Run Code Online (Sandbox Code Playgroud)

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

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

@implementation NSWindow (CategoryNSWindow)

#pragma mark - Full Screen Mode:

- (BOOL) inFullScreenMode {

    return (self.styleMask & NSFullScreenWindowMask);
}

@end
Run Code Online (Sandbox Code Playgroud)

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

- (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];
}
Run Code Online (Sandbox Code Playgroud)

根据需要重命名方法.