Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何显示然后隐藏占据全屏的覆盖窗口_Swift_Macos_Cocoa_Window - Fatal编程技术网

Swift 如何显示然后隐藏占据全屏的覆盖窗口

Swift 如何显示然后隐藏占据全屏的覆盖窗口,swift,macos,cocoa,window,Swift,Macos,Cocoa,Window,所以我试图在整个屏幕上显示一个窗口覆盖(甚至是dock和菜单栏),捕获所有输入事件,并在计时器定义的x秒后隐藏它。我知道这是可能的,因为AppStore中有一个应用程序正在这样做 我发现了两种方法: 第一: 第二: 使用故事板 let window = FullScreenWindowController(windowNibName: NSNib.Name(rawValue: "FullScreenWindow")) self.application.runModal(for: self.win

所以我试图在整个屏幕上显示一个窗口覆盖(甚至是dock和菜单栏),捕获所有输入事件,并在计时器定义的x秒后隐藏它。我知道这是可能的,因为AppStore中有一个应用程序正在这样做

我发现了两种方法: 第一:

第二: 使用故事板

let window = FullScreenWindowController(windowNibName: NSNib.Name(rawValue: "FullScreenWindow"))
self.application.runModal(for: self.window.window!)
第一个解决方案导致出现此日志:

Assertion failure in -[NSWindow _changeJustMain], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1504.83.101/AppKit.subproj/NSWindow.m:14861
Invalid parameter not satisfying: [self canBecomeMainWindow]
而且,我无法在呈现模式时运行计时器。模式会阻止所有事件,并且计时器循环无法发生。 我看到了一些使用NSRunner looper的方法。。。但我不确定这在当前SDK版本中是否仍然可行

至于第二个解决方案,我无法恢复初始应用程序状态,我的意思是在显示覆盖后隐藏它。 此解决方案的另一个缺点是停靠点仍然可见,并且可以进行交互


如果您能给我一些建议,我将不胜感激,因为我是MacOS开发人员的新手。

在第二种方法中,通过将窗口级别设置为CGShieldingWindowLevel()解决了这个问题。
不确定这是否正确(苹果允许)并且可以使用(文档说不应该使用).

我正在开发一个类似的功能。你能分享整个工作代码吗?
Assertion failure in -[NSWindow _changeJustMain], /Library/Caches/com.apple.xbs/Sources/AppKit/AppKit-1504.83.101/AppKit.subproj/NSWindow.m:14861
Invalid parameter not satisfying: [self canBecomeMainWindow]