SwiftUI颜色的十六进制代码/RGB值是多少?

3

是否有一个编译好的 SwiftUI 颜色的十六进制代码或 RGB 值列表?我想知道 Color.purple 的值,但似乎找不到好的来源。是否可以通过编程方式确定十六进制代码或 RGB 值?或者我可以查看一些 Color 的属性吗?提前感谢!


1
我们可以在代码中创建和使用十六进制或RGB颜色,你现在的目标是什么?你想要一起创建还是翻译它们? - ios coder
将默认的SwiftUI颜色转换为RGB或十六进制... - nickcoding
3个回答

5

如果你正在使用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
}

2

iOS 17 / macOS 14

您可以在给定的环境中请求解析颜色组件,因为不同环境中的颜色是不同的(例如在暗色和亮色环境中)。在下面的示例中,我使用了当前所用颜色的环境进行解析。

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) }
    }
}

上面的代码已经是使用Xcode 15 beta 1编写的iOS 17 beta 1版本。
你还可以获取颜色的RGBA组件。

-2

这样使用是不是很好呢?

    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
        )
    }
    
}

2
这个问题被标记为SwiftUI。它使用Color而不是UIColor - Leo Dabus

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