如何在 Mac Catalyst 应用程序中检测颜色面板的颜色变化?
How to detect color panel's color change in Mac Catalyst app?
在 Mac Catalyst 中,有一个显示颜色面板的默认工具栏项。
https://developer.apple.com/documentation/appkit/nstoolbaritem/identifier/1531463-showcolors
它显示得很好,但我找不到从这个颜色面板检测颜色变化的方法。有人知道怎么做吗?
单击工具栏项时,会显示 NSColorPanel
的实例。可以从 NSColorPanel.color
访问所选颜色,但我们没有对显示面板的引用。 class NSColorPanel
对 Mac Catalyst 应用程序也是不可见的。
幸运的是,在颜色面板中选择颜色时会发布一个 notification。所以,我们所需要的只是观察该通知以获取对 NSColorPanel
实例的引用,然后访问它的 color
属性:
NotificationCenter.default.addObserver(forName: .init("NSColorPanelColorDidChangeNotification"), object: nil, queue: nil) { notification in
let color = (notification.object as? NSObject)?.value(forKey: "color") as? UIColor
print("Color changed", color)
}
在 Mac Catalyst 中,有一个显示颜色面板的默认工具栏项。
https://developer.apple.com/documentation/appkit/nstoolbaritem/identifier/1531463-showcolors
它显示得很好,但我找不到从这个颜色面板检测颜色变化的方法。有人知道怎么做吗?
单击工具栏项时,会显示 NSColorPanel
的实例。可以从 NSColorPanel.color
访问所选颜色,但我们没有对显示面板的引用。 class NSColorPanel
对 Mac Catalyst 应用程序也是不可见的。
幸运的是,在颜色面板中选择颜色时会发布一个 notification。所以,我们所需要的只是观察该通知以获取对 NSColorPanel
实例的引用,然后访问它的 color
属性:
NotificationCenter.default.addObserver(forName: .init("NSColorPanelColorDidChangeNotification"), object: nil, queue: nil) { notification in
let color = (notification.object as? NSObject)?.value(forKey: "color") as? UIColor
print("Color changed", color)
}