gpt4 book ai didi

objective-c - 我的 Cocoa 应用程序如何收到 NSScreen 分辨率更改的通知?

转载 作者:可可西里 更新时间:2023-11-01 00:57:25 29 4
gpt4 key购买 nike

<分区>

我正在制作一个带有 float 窗口的 Cocoa 应用程序。 float 窗口应该位于主屏幕的中心,大小为主屏幕的 1/4。以下 Swift 是我的应用程序的精髓:

import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var panel: NSPanel!
func applicationDidFinishLaunching(_ aNotification: Notification) {
let screenRect:CGRect = NSScreen.main()!.frame
panel = NSPanel(
contentRect: NSRect(
x: screenRect.width/4,
y: screenRect.height/4,
width: screenRect.width/2,
height: screenRect.height/2
),
styleMask: NSWindowStyleMask.nonactivatingPanel,
backing: NSBackingStoreType.buffered,
defer: false
)
panel.alphaValue = 0.5
panel.backgroundColor = NSColor.red
panel.level = Int(CGWindowLevelForKey(CGWindowLevelKey.maximumWindow))
panel.orderFront(nil)
}
}

这会产生一个像这样的面板:

CORRECTLY POSITIONED

问题出现在主屏幕分辨率改变时。显示这一点的一种方法是转到“系统偏好设置”>“显示”并将分辨率设置为“缩放”和“更多空间”。这样做之后,面板看起来像这样:

INCORRECTLY POSITIONED AFTER RESOLUTION CHANGE

可以看到,更改分辨率后面板的位置不正确。我希望面板保持其位置:居中且为屏幕大小的 1/4。为此,我检测屏幕分辨率(即 NSScreenframe 属性)何时更改,以便我可以更改面板的大小和位置。

NSScreenframe 属性发生变化时,是否会触发某些事件?或者有不同的方法来处理这个问题吗?

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