Swift中如何查看didChangeScreenParametersNotification通知内容?
解决NSApplication.didChangeScreenParametersNotification获取屏幕参数的问题
你当前代码的问题在于,NSApplication.didChangeScreenParametersNotification通知的object是NSApplication实例,不是NSScreen,所以强制转换会失败。
要获取更新后的屏幕参数,收到通知后直接访问当前的屏幕信息即可,比如获取主屏幕的可见帧:
var myNotificationObserver: NSObjectProtocol? = nil myNotificationObserver = NotificationCenter.default.addObserver(forName: NSApplication.didChangeScreenParametersNotification, object: NSApplication.shared, queue: .main) { [weak self] _ in // 获取主屏幕的可见帧(已扣除Dock等系统元素) if let mainScreen = NSScreen.main { print("更新后的屏幕可见尺寸:\(mainScreen.visibleFrame.size)") } }
如果需要监听所有屏幕的变化,也可以遍历NSScreen.screens来获取每个屏幕的参数:
// 遍历所有屏幕 for screen in NSScreen.screens { print("屏幕\(screen.deviceDescription)的可见尺寸:\(screen.visibleFrame.size)") }
补充说明
这个通知的作用是告知屏幕参数(比如分辨率、可见区域)发生了变化,它不会在通知的object或userInfo里携带具体的屏幕对象,而是需要你主动去查询当前的屏幕状态。
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

