每次使用UIColor都要来回来去的转换,而且设计给的参数一般都是16进制的,来回来去的转换比较麻烦,写一个扩展来解决这个问题。
用法大体如下:
NSColor.init(hex: "#333333")
NSColor.init(hex: "0x333333")
NSColor.init(hex: "333333")
扩展具体实现如下:
import Foundation
import UIKit
extension UIColor {
/// 使用 #FFFFFF 来初始化颜色
convenience init(hex: String, alpha: CGFloat = 1.0) {
var hexFormatted: String = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()
if hexFormatted.hasPrefix("#") {
hexFormatted = String(hexFormatted.dropFirst())
}
if hexFormatted.hasPrefix("0x") {
hexFormatted = String(hexFormatted.dropFirst())
hexFormatted = String(hexFormatted.dropFirst())
}
assert(hexFormatted.count == 6, "Invalid hex code used.")
var rgbValue: UInt64 = 0
Scanner(string: hexFormatted).scanHexInt64(&rgbValue)
self.init(red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
alpha: alpha)
}
}