如何显示,然后隐藏占据全屏
问题描述:
所以我试图表现出在整个画面窗口的叠加(甚至在对接和菜单栏)捕获所有输入事件叠加窗口,并经过定时器定义x秒,隐藏。我知道这是可能的,因为AppStore中有一个应用程序正在执行此操作。如何显示,然后隐藏占据全屏
我找到了两种方法:一是 :
let windowLevel = CGShieldingWindowLevel();
let windowRect = NSScreen.main?.frame
var overlayWindow = NSWindow(contentRect: windowRect!, styleMask: NSWindow.StyleMask.borderless, backing: NSWindow.BackingStoreType.buffered, defer: false, screen: NSScreen.screens[0])
overlayWindow.level = NSWindow.Level(rawValue: NSWindow.Level.RawValue(windowLevel))
overlayWindow.backgroundColor = .black
overlayWindow.alphaValue = 0.4
overlayWindow.makeKeyAndOrderFront(nil)
overlayWindow.makeMain()
二: 用故事板
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()在第二种方法解决。 不知道但如果这是正确的(苹果许可证),并可以使用(文档说应该)...