在连接的显示器上打开NSWIndow/NSView



环境:macOS Big Sur 11.5.2/Swift 5.4
目标平台:macOS

我在搜索如何在连接的显示器上打开新的NSWindow/NSView时遇到了此讨论。

我将obj-c代码转换为Swift,但无法使其工作。我在IBAction中设置了该方法,并将该操作链接到我放置在名为";显示外部显示">

我做错了什么?

import Cocoa
class ViewController: NSViewController {
var externalDisplay: NSScreen?
var fullScreenWindow: NSWindow?
var fullScreenView: NSView?

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
@IBAction func showExternalDisplayButtonClicked(sender: Any?) {
// Open a window on the external display if present
if NSScreen.screens.count > 1 {
externalDisplay = NSScreen.screens.last
let externalDisplayRect = externalDisplay!.frame
fullScreenWindow = NSWindow(contentRect: externalDisplayRect, styleMask: .borderless, backing: .buffered, defer: true, screen: externalDisplay)
fullScreenWindow!.level = .normal
fullScreenWindow!.isOpaque = false
fullScreenWindow!.hidesOnDeactivate = false
fullScreenWindow!.backgroundColor = .red
let viewRect = NSRect(x: 0, y: 0, width: externalDisplay!.frame.width, height: externalDisplay!.frame.height)
fullScreenView = NSView(frame: viewRect)
fullScreenWindow!.contentView = fullScreenView
fullScreenWindow!.makeKeyAndOrderFront(self)
}
}
}

为什么要制作styleMask: .borderless?文档表示,无边界窗口无法成为关键窗口或主窗口,因此makeKeyAndOrderFront失败。

如果你制作一个像这样的普通窗口:

let mask: NSWindow.StyleMask = [.titled, .closable, .miniaturizable, .resizable]
fullScreenWindow = NSWindow(contentRect: externalDisplayRect, styleMask: mask, backing: .buffered, defer: true, screen: externalDisplay)

它在最后一个屏幕上打开。

最新更新