很多时候我们需要保存颜色的16进制格式的值到icloud中,读取颜色的时候,就需要从十六进制字符串转为UICOLOR,以下是对UIColor的扩展,扩展后可支持转换
extension UIColor { //扩展UIColor 类
// 新增的方法:从十六进制字符串创建颜色
convenience init?(hexString: String) {
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 1.0
if hexString.hasPrefix("#") {
let start = hexString.index(hexString.startIndex, offsetBy: 1)
let hexColor = String(hexString[start...])
if hexColor.count == 6 || hexColor.count == 8 {
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
if hexColor.count == 8 {
a = CGFloat((hexNumber & 0xff000000) >> 24) / 255
}
self.init(red: r, green: g, blue: b, alpha: a)
return
}
}
}
return nil
}
}
使用方法
let aHexColorString = “#FF0000” //红色的16进制字符串
let noteColor = UIColor(hexString: aHexColorString) // 该条语句创建一个红色的 uicolor变量noteColor
IOS SWIFT开发系列–如何扩展UIColor,使得支持从16进制字符串生成UIColor