gpt4 book ai didi

macos - 允许 NSWindow (NSPanel) float 在全屏应用程序上方

转载 作者:行者123 更新时间:2023-12-03 16:10:33 27 4
gpt4 key购买 nike

我正在尝试添加一个小窗口,提供从系统中任何位置到主应用程序的“快速输入”。

用户可以按热键,窗口会弹出,并漂浮在所有其他窗口之上。

在大多数情况下,这不是什么大问题。我可以将 NSWindow 配置为:

level = Int(CGWindowLevelKey.TornOffMenuWindowLevelKey.rawValue)
collectionBehavior = .CanJoinAllSpaces

我还可以将其设置为带有 NSNonactivatingPanelMask 选项的 NSPanel。

唯一的问题是:即使用户位于包含全屏应用程序的空间中,如何才能使窗口能够在屏幕上弹出?

我知道当应用程序为 LSUIElement=true(在 Dock 中没有位置的应用程序)时这是可能的,但我的不是。

最佳答案

好吧,我的想法是正确的,棘手的部分是所有选项如何相互作用。这是有效的:

  • NSPanel,不是 NSWindow
  • 样式掩码:[.borderless, .nonactivatingPanel]

还有这些属性:

panel.level = .mainMenu
panel.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]

Swift 4.2 代码

使用这些设置创建并显示面板。然后,您可以将面板拖动到全屏应用程序上(双显示器设置)。

let panel2 = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 200, height: 200), styleMask: [.titled, .nonactivatingPanel], backing: .buffered, defer: true)
panel2.level = .mainMenu
panel2.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel2.orderFrontRegardless()

Floating NSPanel above fullscreen macOS app

切换到无边框将阻止用户移动您的窗口。

let panel2 = NSPanel(contentRect: NSRect(x: 0, y: 0, width: 200, height: 200), styleMask: [.borderless, .nonactivatingPanel], backing: .buffered, defer: true)
panel2.level = .mainMenu
panel2.collectionBehavior = [.canJoinAllSpaces, .fullScreenAuxiliary]
panel2.orderFrontRegardless()

关于macos - 允许 NSWindow (NSPanel) float 在全屏应用程序上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36205834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com