macOS颜色选择面板NSColorPanel
macOS颜色选择面板NSColorPanel

macOS颜色选择面板NSColorPanel

NSColorPanel 是 macOS 系统提供的 标准颜色选择面板,用于让用户在应用中选择颜色。在 TextEdit、Xcode 等 App 中点开“颜色”按钮看到的颜色窗口,就是 NSColorPanel。

如果使用SwiftUI、并且对于颜色的需求比较简单,可以考虑使用《SwiftUI颜色控件ColorPicker》替代NSColorPanel。

基本用法

let panel = NSColorPanel.shared
panel.makeKeyAndOrderFront(nil)

在SwiftUI中,可以直接调用:

import SwiftUI

struct ContentView: View {
    @State private var selectedColor: NSColor = .systemBlue
    var body: some View {
        VStack {
            Button("颜色") {
                let panel = NSColorPanel.shared
                panel.makeKeyAndOrderFront(nil)
            }
        }
        .frame(width: 300,height: 200)
    }
}

主要功能

1、单例:NSColorPanel.shared 表示系统共享一个颜色面板。

2、支持多种模式:色轮、滑块、颜色表、图像选取、铅笔等。

3、支持插件扩展:通过 NSColorPicker 插件添加自定义页签。

4、实时同步:可以实时绑定 App 的颜色选择逻辑。

5、可嵌入自定义 UI:使用 setAccessoryView(…) 添加附加视图。

使用示例

1、监听颜色变化

let panel = NSColorPanel.shared
panel.setTarget(self)
panel.setAction(#selector(colorDidChange(_:)))
panel.makeKeyAndOrderFront(nil)

监听方法:

@objc func colorDidChange(_ sender: NSColorPanel) {
    let selectedColor = sender.color
    // 应用颜色
}

2、设置初始颜色

NSColorPanel.shared.color = NSColor.red

3、SwiftUI实现并通过回调显示颜色

import SwiftUI

struct ContentView: View {
    @State private var selectedColor: NSColor = .systemBlue
    var body: some View {
        VStack {
            Rectangle()
                .fill(Color(nsColor: selectedColor))
                .frame(width: 50,height:50)
                .cornerRadius(6)
                .shadow(radius: 2)
            Button("颜色") {
                let panel = NSColorPanel.shared
                panel.setTarget(ColorPanelHandler.shared)
                panel.setAction(#selector(ColorPanelHandler.colorChanged(_:)))
                panel.color = selectedColor
                panel.makeKeyAndOrderFront(nil)
                
                ColorPanelHandler.shared.onColorChange = { newColor in
                    selectedColor = newColor
                }
            }
        }
        .frame(width: 300,height: 200)
    }
}

class ColorPanelHandler: NSObject {
    static let shared = ColorPanelHandler()
    
    var onColorChange: ((NSColor) -> Void)?
    
    @objc func colorChanged(_ sender: NSColorPanel) {
        let color = sender.color
        print("颜色已更改:\(color)")
        if let onColor = onColorChange {
            onColor(color)
        }
    }
}

在点击Button按钮后,会弹出颜色选择面板。

NSColorPanel绑定的Target目标为ColorPanelHandler单例,Action方法为ColorPanelHandler的colorChanged方法。

通过ColorPanelHandler的onColorChange方法,设置颜色回调。

最终通过,修改NSColorPanel颜色选择面板的颜色,通过颜色回调,方块视图获取到对应的填充色。

总结

NSColorPanel 是 macOS 系统内置的共享颜色选择窗口,支持标准 UI、插件扩展、实时颜色回调与自定义视图嵌入,是 macOS App 中颜色选择的核心入口。

相关文章

1、macOS颜色NSColor:https://fangjunyu.com/2025/07/01/macos%e9%a2%9c%e8%89%b2nscolor/

2、mac颜色选择控件NSColorWell:https://fangjunyu.com/2025/07/01/mac%e9%a2%9c%e8%89%b2%e9%80%89%e6%8b%a9%e6%8e%a7%e4%bb%b6nscolorwell/

3、macOS颜色面板插件接口NSColorPicker:https://fangjunyu.com/2025/07/02/macos%e9%a2%9c%e8%89%b2%e9%9d%a2%e6%9d%bf%e6%8f%92%e4%bb%b6%e6%8e%a5%e5%8f%a3nscolorpicker/

4、SwiftUI颜色控件ColorPicker: https://fangjunyu.com/2025/07/02/swiftui%e9%a2%9c%e8%89%b2%e6%8e%a7%e4%bb%b6colorpicker/

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注