十六进制颜色表示方式是 #RRGGBB
(6位),带 alpha 的表示方式是 #RRGGBBAA
(8位)
取值范围是 00
- FF
。
十六进制颜色缩写的表示方式是 #RGB
(3位),带 alpha 的表示方式是 #RGBA
(4位)
取值范围是 0
- F
,缩略的规则和前三位相同。
基于以上知识,对 UIColor 添加一个扩展方法,支持直接传入十六进制颜色,Swift 版本:
extension UIColor {
static func hex(_ val: UInt) -> UIColor {
var r: UInt = 0, g: UInt = 0, b: UInt = 0;
var a: UInt = 0xFF
var rgb = val
if (val & 0xFFFF0000) == 0 {
a = 0xF
if val & 0xF000 > 0 {
a = val & 0xF
rgb = val >> 4
}
r = (rgb & 0xF00) >> 8
r = (r << 4) | r
g = (rgb & 0xF0) >> 4
g = (g << 4) | g
b = rgb & 0xF
b = (b << 4) | b
a = (a << 4) | a
} else {
if val & 0xFF000000 > 0 {
a = val & 0xFF
rgb = val >> 8
}
r = (rgb & 0xFF0000) >> 16
g = (rgb & 0xFF00) >> 8
b = rgb & 0xFF
}
//NSLog("r:%X g:%X b:%X a:%X", r, g, b, a)
return UIColor(red: CGFloat(r) / 255.0,
green: CGFloat(g) / 255.0,
blue: CGFloat(b) / 255.0,
alpha: CGFloat(a) / 255.0)
}
}
使用的时候很方便:
例如颜色是 #FFAABB
6 位颜色值
let color: UIColor = .hex(0xFFAABB)
8 位带透明度,设置透明度是 0xDD
let color: UIColor = .hex(0xFFAABBDD)
3 位颜色值
let color: UIColor = .hex(0xFAB)
4 位带透明度,设置透明度是 0xDD
let color: UIColor = .hex(0xFABD)
可以直接和设计图里的颜色 #FFAABB
对应起来,查询和使用都非常方便。