MacOS - NSColorPanel选择颜色

预览

NSColorPanel是应用程序中选择颜色的标准用户界面,提供了许多标准颜色选择模式,使用NSColorPickingDefaultNSColorPickingCustom协议,允许应用程序添加自己的颜色选择模式。
NSColorPanel继承自NSWindow,使用orderFront调出。

  • 执行如下代码,简单调出颜色面板:
        let clr = NSColorPanel.shared
        clr.orderFront(nil)
  • 运行如下:
    MacOS - NSColorPanel选择颜色

创建及使用

创建颜色面板分为以下步骤:

  1. 获取共享的颜色面板对象
		let colorpl = NSColorPanel.shared
  1. 设置颜色选择器模式
		//NSColorPanel.setPickerMask(.grayModeMask) //确定NSColorPanel中可用的颜色选择模式。
		//NSColorPanel.setPickerMode(.gray) //指定颜色面板的初始选取器。
		colorpl.mode = .RGB //指定颜色面板的初始选择模式。
  1. 配置颜色面板
		colorpl.color = .red //初始化选中颜色值
		colorpl.isContinuous = true //默认true,是否连续触发操作
		colorpl.setAction(#selector(didChangeColor)) //颜色值变化触发方法
		colorpl.setTarget(self)
		colorpl.showsAlpha = true //默认false,是否显示alpha值和不透明度滑块的布尔值
		//accessoryView
		let view = NSView.init(frame: NSRect(x: 0, y: 0, width: 100, height: 200))
		view.wantsLayer = true
		view.layer?.backgroundColor = NSColor.red.cgColor
		colorpl.accessoryView = view
  1. 弹出颜色面板
		colorpl.orderFront(nil) //弹出颜色选择面板
  1. 执行如下代码:
    @IBAction func selColor(_ sender: Any) {
        //选择颜色
        
        //1.获取共享的颜色面板对象
        let colorpl = NSColorPanel.shared
        //2.设置颜色选择器模式
        //NSColorPanel.setPickerMask(.grayModeMask) //确定NSColorPanel中可用的颜色选择模式。
        //NSColorPanel.setPickerMode(.gray) //指定颜色面板的初始选取器。
        colorpl.mode = .RGB //指定颜色面板的初始选择模式。
        //3.配置颜色面板
        colorpl.color = .red //初始化选中颜色值
        colorpl.isContinuous = true //默认true,是否连续触发操作
        colorpl.setAction(#selector(didChangeColor)) //颜色值变化触发方法
        colorpl.setTarget(self)
        colorpl.showsAlpha = true //默认false,是否显示alpha值和不透明度滑块的布尔值
        //accessoryView
        let view = NSView.init(frame: NSRect(x: 0, y: 0, width: 100, height: 200))
        view.wantsLayer = true
        view.layer?.backgroundColor = NSColor.red.cgColor
        colorpl.accessoryView = view
        //4.弹出颜色面板
        colorpl.orderFront(nil) //弹出颜色选择面板
    }
    
    //颜色值变化触发方法
    @objc func didChangeColor(sender: NSColorPanel) {
        print(sender.mode, "===", sender.color, "===", sender.alpha)
    }
  1. 运行结果
    MacOS - NSColorPanel选择颜色

此外,若需要添加或删除可选颜色,可通过attachColorListdetachColorList方法来管理颜色列表。