swift - 在连接的显示器上打开 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)
它在最后一个屏幕上打开。
推荐阅读
- python - 如何在中央环境中运行 python 脚本
- azure - 事件网格批处理行为
- google-cloud-run - 从 bitbucket 管道部署到云运行导致 google.api_core.exceptions.PermissionDenied: 403 Permission denied on resource project None
- android - 无法加载类 'com.android.builder.model.Named
- machine-learning - 在一系列线性回归分析中找到上限和下限
- python - Django REST Framework 无法发送多个数据
- vue.js - $el 未定义,而 $ref 在 Vuejs 3 中有一个对象
- api - 使用 Voiceflow 连接 Create SMS API - 提示?
- php - 如何覆盖 Magento 2 的 \lib 文件夹中的 PHP 类?
- pandas - groupby 与 str.contains 在不同的列