从 SwiftUI 颜色选择器中获取价值
Get Value from SwiftUI Color Picker
iOS 14 个带有 UIKit 的原生颜色选择器 (UIColorWell
), AppKit (NSColorWell
) and SwiftUI (ColorPicker
)。
虽然颜色井有一个 属性 selectedColor
显示所选的 UIColor
/NSColor
值,但 SwiftUI ColorPicker
需要一个 Binding<Color>
.但是,我找不到任何有关如何从 Color
值中获取有用信息的信息。
使用 Color.init(_: UIColor)
but there does not seem to be a way to get a UIColor
from an existing Color
or to extract the color components (e.g. the RGB values similar to the UIColor.getRed(_:green:blue:alpha:)
方法从 UIColor
创建 Color
很容易。
如何从 SwiftUI 获取基础颜色值 ColorPicker
?
在大多数情况下,您可以直接在 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)
}
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)
iOS 14 个带有 UIKit 的原生颜色选择器 (UIColorWell
), AppKit (NSColorWell
) and SwiftUI (ColorPicker
)。
虽然颜色井有一个 属性 selectedColor
显示所选的 UIColor
/NSColor
值,但 SwiftUI ColorPicker
需要一个 Binding<Color>
.但是,我找不到任何有关如何从 Color
值中获取有用信息的信息。
使用 Color.init(_: UIColor)
but there does not seem to be a way to get a UIColor
from an existing Color
or to extract the color components (e.g. the RGB values similar to the UIColor.getRed(_:green:blue:alpha:)
方法从 UIColor
创建 Color
很容易。
如何从 SwiftUI 获取基础颜色值 ColorPicker
?
在大多数情况下,您可以直接在 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) }
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)