注意

由于一些设计问题以及代码仓库日渐膨胀,这个包已被弃用并替换,并且该代码仓库将被存档。请使用它的后继者 ColorWellKit 来替代。

ColorWell

Continuous Integration Release Swift Versions Docs License

一个通用的替代品,用于代替 Cocoa 中的 NSColorWell 和 SwiftUI 中的 ColorPicker

ColorWell 的设计旨在模仿 macOS 13 Ventura 中新的颜色选择器外观和行为,为那些希望在旧操作系统上使用新设计的用户而设计。虽然目标是使 ColorWell 的外观和行为与 Apple 的设计类似,但它不是一个精确的克隆。从系统颜色的处理方式到阴影的大小,存在一些细微的设计差异。但是,在实践中,几乎没有明显的差异。

安装

将以下依赖项添加到你的 Package.swift 文件中

.package(url: "https://github.com/jordanbaird/ColorWell", from: "0.2.2")

用法

在此处阅读完整文档

SwiftUI

创建一个 ColorWellView 并将其添加到你的视图层级中。有各种各样的初始化器以及一些修饰符可供选择,允许你设置颜色选择器的颜色、标签和动作。

import SwiftUI
import ColorWell

struct ContentView: View {
    @Binding var fontColor: Color

    var body: some View {
        VStack {
            ColorWellView("Font Color", color: fontColor, action: updateFontColor)
                .colorWellStyle(.expanded)

            MyCustomTextEditor(fontColor: $fontColor)
        }
    }

    private func updateFontColor(_ color: Color) {
        fontColor = color
    }
}

Cocoa

使用可用的初始化器之一创建一个 ColorWell。使用 onColorChange(perform:) 方法观察颜色变化。

import Cocoa
import ColorWell

class ContentViewController: NSViewController {
    let colorWell: ColorWell
    let textEditor: MyCustomNSTextEditor

    init(fontColor: NSColor) {
        self.colorWell = ColorWell(color: fontColor)
        self.textEditor = MyCustomNSTextEditor(fontColor: fontColor)

        super.init(nibName: "ContentView", bundle: Bundle(for: Self.self))

        // Set the style
        colorWell.style = .expanded

        // Add a change handler
        colorWell.onColorChange { newColor in
            self.textEditor.fontColor = newColor
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(colorWell)
        view.addSubview(textEditor)

        // Layout the views, perform setup work, etc.
    }
}

许可协议

ColorWell 在 MIT 许可协议下可用。