实战需求
开发macOS App时我们有时需求要一种方法来检测屏幕分辨率的变化或用户何时更改显示器配置。例如,插入新的主显示器或从多屏设置返回时,我们需要调整当前打开的图像的大小。
解决方案
这个过程相当简单。您必须监听的事件是
NSApplication.didChangeScreenParametersNotification 事件。
首先,我们创建一个变量来保存这个事件。
var screenResChanged = NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification)
然后我们 使用SwiftUI 中的onReceive(_:perform:)方法来监听它。您可以将其添加到您想要监听的任何 SwiftUI 视图中
import SwiftUI
struct Balls: View {
@State var oldScreenSize = NSSize.zero
@State var currentScreenSize = NSSize.zero
@State var hasSizeChanged = false
var screenResChanged = NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification)
var body: some View {
HStack{
if (hasSizeChanged){
Text("Screen Size" + NS