从SwiftUI颜色选择器获取值

4

iOS 14 中为 UIKit (UIColorWell)、AppKit (NSColorWell) 和 SwiftUI (ColorPicker) 提供原生的颜色选择器。

尽管颜色选择器具有selectedColor属性,可公开选定的UIColor/NSColor值,但SwiftUIColorPicker需要一个Binding<Color>。然而,我找不到任何有关如何从Color值中获取有用信息的信息。

使用Color.init(_: UIColor)UIColor创建Color很容易,但似乎没有办法从现有的Color中获取UIColor或提取颜色组件(例如类似于UIColor.getRed(_:green:blue:alpha:)方法的RGB值)。

如何从 SwiftUI ColorPicker获取底层颜色值?

2个回答

3
在大多数情况下,您直接在SwiftUI中使用颜色(Color),不需要从中提取任何内容。
无论如何,如果需要使用UIColor,SwiftUI 2.0提供了新的API。
extension UIColor {

    @available(iOS 14.0, tvOS 14.0, watchOS 7.0, *)
    @available(OSX, unavailable)
    public convenience init(_ color: Color)
}

0
import SwiftUI
extension Color {
    struct Components {
        var r, g, b, a: Double
    }
    
    var components: Components? {
        guard let components = UIColor(self).cgColor.components?.compactMap(Double.init),
              components.count == 4
        else { return nil}
        return Components(r: components[0], g: components[1], b: components[2], a: components[3])
    }
}
// Usage
print(Color.primary.components)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接