SwiftUI-十六进制字符串转颜色
2019-12-06 本文已影响0人
Augs
创建类ColorExtension.swift
代码如下:
import SwiftUI
extension Color {
init?(hex: String){
let r, g, b, a: CGFloat
if hex.hasPrefix("#") {
let start = hex.index(hex.startIndex, offsetBy: 1)
let hexColor = String(hex[start...])
if hexColor.count == 6 {
let scanner = Scanner(string: hexColor)
var hexNumber: UInt64 = 0
if scanner.scanHexInt64(&hexNumber) {
r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
b = CGFloat(hexNumber & 0x0000ff) / 255
a = 255 / 255
self.init(red: Double(r), green: Double(g), blue: Double(b))
_ = self.opacity(Double(a))
return
}
}
}
return nil
}
}
如果十六进制颜色中需要包含透明度则将代码做如下修改:
extension Color {
init?(hex: String){
let r, g, b, a: CGFloat
if hex.hasPrefix("#") {
let start = hex.index(hex.startIndex, offsetBy: 1)
let hexColor = String(hex[start...])
//从此处开始修改
if hexColor.count == 8 {
let scanner = Scanner(string: hexColor)
var hexNumber: UInt64 = 0
if scanner.scanHexInt64(&hexNumber) {
r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
a = CGFloat(hexNumber & 0x000000ff) / 255
self.init(red: Double(r), green: Double(g), blue: Double(b))
_ = self.opacity(Double(a))
return
}
}
}
return nil
}
}
使用方法:
Text("Hello, World")
.foregroundColor(Color(hex: "#FA651C"))