如何以编程方式关闭全屏模式NSWindow?

时间:2015-12-21 20:16:32

标签: macos cocoa fullscreen nswindow appkit

我的应用程序有两个窗口(主视频和视频),两者都可以独立进入全屏模式。主窗口有一个按钮,用于切换视频窗口的可见性。当视频窗口可见时,按钮只会发送如下信息:

[theVideoWindow close];

当视频窗口未处于全屏模式时,它可以正常工作。

但是当视频窗口在全屏模式下运行时,窗口看起来像是被排序(关闭),但它仍然存在(就像一个不可见的窗口)并接受鼠标事件。用户无法与其他应用程序交互,因为隐藏窗口会占用所有鼠标事件而无法关闭它,因为标题栏和菜单已消失。

是否有任何最佳做法以编程方式关闭全屏模式窗口,而不是先退出全屏模式,然后在NSWindowDidExitFullScreenScreenNotification通知处理程序中将其关闭?

提前致谢。

这似乎是我的错误。另一个开发人员,在NSWindowDidExitFullScreenNotification通知处理程序中显式发送orderFront:使窗口在退出全屏模式后立即可见,并使窗口仍处于活动状态。

2 个答案:

答案 0 :(得分:3)

在我的应用上,我检查窗口是否在全屏上,然后我使用ToogleFullScreen方法

- (BOOL)isFullScreen {
     return ((self.window.styleMask & NSFullScreenWindowMask) == NSFullScreenWindowMask);
}

if([self isFullscreen]) {
     [self.window toggleFullScreen:nil];
}

答案 1 :(得分:0)

@Swul在Swift 4中的解决方案:

func isFullScreen() -> Bool {
    guard let window = view.window else { return false }
    return window.styleMask.contains(.fullScreen)
}

if isFullscreen() {
    view.window?.toggleFullScreen(nil)
}