问题描述
是否有SwiftUI颜色的十六进制代码或RGB值的已编译列表?我想对Color.purple都知道,但似乎找不到任何好的资源。有没有办法以编程方式确定十六进制代码或RGB值?或者,也许我可以看一下Color的某些属性?预先感谢!
解决方法
如果您在SwiftUI 2中进行编码,则可以将Color转换为UIColor并使用getRed方法获取红色,绿色,蓝色和Alpha分量。一旦有了组件,就可以将值转换为六进制字符串:
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)
return uiColor.getRed(&r,green: &g,blue: &b,alpha: &a) ? (r,a) : nil
}
var hexaRGB: String? {
guard let rgba = rgba else { return nil }
return String(format: "#%02x%02x%02x",Int(rgba.red*255),Int(rgba.green*255),Int(rgba.blue*255))
}
var hexaRGBA: String? {
guard let rgba = rgba else { return nil }
return String(format: "#%02x%02x%02x%02x",Int(rgba.red * 255),Int(rgba.green * 255),Int(rgba.blue * 255),Int(rgba.alpha * 255))
}
}
Color.purple.hexaRGB // "#af52de"
Color.purple.hexaRGBA // "#af52deff"
if let rgba = Color.purple.rgba {
rgba.red // 0.686274528503418
rgba.green // 0.321568638086319
rgba.blue // 0.8705882430076599
rgba.alpha // 1
}
,
像这样使用它不好吗?
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
)
}
}