Swift 如何显示然后隐藏占据全屏的覆盖窗口
所以我试图在整个屏幕上显示一个窗口覆盖(甚至是dock和菜单栏),捕获所有输入事件,并在计时器定义的x秒后隐藏它。我知道这是可能的,因为AppStore中有一个应用程序正在这样做 我发现了两种方法: 第一: 第二: 使用故事板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
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]