需求:由于顏色值用16進(jìn)制用的比較多瓣窄,系統(tǒng)不支持16進(jìn)制顏色值匿乃,需要自己來適配一下
以前使用oc 可以這樣使用宏來
#define UIColorFromRGB(rgbValue) \
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
顏色常見的表示方法 #5B5B5B 和0x5B5B5B兩種格式
實(shí)現(xiàn)一 0x5B5B5B
/// 樣式 0x5B5B5B
///
/// - Parameters:
/// - color_vaule: 傳入0x5B5B5B格式的色值
/// - alpha: 傳入透明度
/// - Returns: 顏色
func UIColorFromRGB(color_vaule : UInt64 , alpha : CGFloat = 1) -> UIColor {
let redValue = CGFloat((color_vaule & 0xFF0000) >> 16)/255.0
let greenValue = CGFloat((color_vaule & 0xFF00) >> 8)/255.0
let blueValue = CGFloat(color_vaule & 0xFF)/255.0
return UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: alpha)
}
實(shí)現(xiàn)二 #5B5B5B
/// 樣式 #5B5B5B
///
/// - Parameters:
/// - color_vaule: 傳入#5B5B5B格式的字符串
/// - alpha: 傳入透明度
/// - Returns: 顏色
func UIColorFromRGB(color_vaule : String , alpha : CGFloat = 1) -> UIColor {
if color_vaule.isEmpty {
return UIColor.clear
}
var cString = color_vaule.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
if cString.count == 0 {
return UIColor.clear
}
if cString.hasPrefix("#") {
cString.remove(at: cString.startIndex)
}
if cString.count < 6 && cString.count != 6 {
return UIColor.clear
}
let value = "0x\(cString)"
let scanner = Scanner(string:value)
var hexValue : UInt64 = 0
//查找16進(jìn)制是否存在
if scanner.scanHexInt64(&hexValue) {
print(hexValue)
let redValue = CGFloat((hexValue & 0xFF0000) >> 16)/255.0
let greenValue = CGFloat((hexValue & 0xFF00) >> 8)/255.0
let blueValue = CGFloat(hexValue & 0xFF)/255.0
return UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: alpha)
}else{
return UIColor.clear
}
}
使用方法
方法一使用:
tempTableView.backgroundColor = UIColorFromRGB(color_vaule: 0x7FFFAA)
方法二使用:
tempTableView.backgroundColor = UIColorFromRGB(color_vaule: "#7FFFAA")