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

问题描述 投票:4回答:2

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

[theVideoWindow close];

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

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

除了首先退出全屏模式然后在NSWindowDidExitFullScreenScreenNotification通知处理程序中关闭它之外,是否有任何最佳实践以编程方式关闭全屏模式窗口?

提前致谢。


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

macos cocoa fullscreen nswindow appkit
2个回答
3
投票

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

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

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

0
投票

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

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

if isFullscreen() {
    view.window?.toggleFullScreen(nil)
}
© www.soinside.com 2019 - 2024. All rights reserved.