需求:由于颜色值用16进制用的比较多,系统不支持16进制颜色值,需要自己来适配一下
以前使用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两种格式
实现一 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)
}
实现二 #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进制是否存在
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")
网友评论