是否有一个编译好的 SwiftUI 颜色的十六进制代码或 RGB 值列表?我想知道 Color.purple 的值,但似乎找不到好的来源。是否可以通过编程方式确定十六进制代码或 RGB 值?或者我可以查看一些 Color 的属性吗?提前感谢!
如果你正在使用SwiftUI 2进行编码,你可以将Color转换为UIColor并使用getRed方法获取红、绿、蓝和透明度组件。一旦你有了这些组件,你可以将值转换为十六进制字符串:
extension Color {
var uiColor: UIColor { .init(self) }
typealias RGBA = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
var rgba: RGBA? {
var (r, g, b, a): RGBA = (0, 0, 0, 0)
return uiColor.getRed(&r, green: &g, blue: &b, alpha: &a) ? (r, g, b, a) : nil
}
var hexaRGB: String? {
guard let (red, green, blue, _) = rgba else { return nil }
return String(format: "#%02x%02x%02x",
Int(red * 255),
Int(green * 255),
Int(blue * 255))
}
var hexaRGBA: String? {
guard let (red, green, blue, alpha) = rgba else { return nil }
return String(format: "#%02x%02x%02x%02x",
Int(red * 255),
Int(green * 255),
Int(blue * 255),
Int(alpha * 255))
}
}
Color.purple.hexaRGB // "#af52de"
Color.purple.hexaRGBA // "#af52deff"
if let (red, green, blue, alpha) = Color.purple.rgba {
red // 0.686274528503418
green // 0.321568638086319
blue // 0.8705882430076599
alpha // 1
}
您可以在给定的环境中请求解析颜色组件,因为不同环境中的颜色是不同的(例如在暗色和亮色环境中)。在下面的示例中,我使用了当前所用颜色的环境进行解析。
struct ContentView: View {
@Environment(\.self) var environment
@State private var color = Color.yellow
@State private var components: Color.Resolved?
var body: some View {
VStack {
ColorPicker("Select your favorite color", selection: $color)
if let components {
Text("HEX: \(components.description)")
}
}
.padding()
.onChange(of: color, initial: true) { components = color.resolve(in: environment) }
}
}
这样使用是不是很好呢?
import UIKit
extension UIColor {
convenience init(hex:Int, alpha: CGFloat = 1.0) {
self.init(
red: CGFloat((hex & 0xFF0000) >> 16) / 255.0,
green: CGFloat((hex & 0x00FF00) >> 8) / 255.0,
blue: CGFloat((hex & 0x0000FF) >> 0) / 255.0,
alpha: alpha
)
}
}
Color
而不是UIColor
。 - Leo Dabus