Swift開發 UIColor分類Hex顏色轉換
阿新 • • 發佈:2019-02-01
一般UI同事們給的顏色值都是16進位制的,但是在iOS的UIColor中,沒有直接通過Hex值進行設定顏色的介面,所以自己編寫了一個介面。
func colorWithHexString (hex:String)-> UIColor { var hexString = hex if (hexString.hasPrefix("#")) { hexString = (hexString as NSString).substringFromIndex(1) } let index = hexString.startIndex.advancedBy(2) let index2 = hexString.startIndex.advancedBy(4) let range = Range(index ..< index2) let s1:String = hexString.substringToIndex(index) let s2:String = hexString.substringWithRange(range) let s3 = hexString.substringFromIndex(index2) return UIColor(red:CGFloat(hex2dec(s1))/255.0, green:CGFloat(hex2dec(s2)) / 255.0, blue:CGFloat(hex2dec(s3)) / 255.0, alpha:1) } func hex2dec(num:String) -> Float { let str = num.uppercaseString var sum:Float = 0 for i in str.utf8 { sum = sum * 16 + Float(i) - 48 // 0-9 從48開始 if i >= 65 { // A-Z 從65開始,但有初始值10,所以應該是減去55 sum -= 7 } } return sum }
Swift的Range十分的難用,不知道蘋果為啥要把以前的NSRange修改到現在這麼爛。。。。。。。。。
可以將上邊的方法放到UIColor類擴充套件裡:
extension UIColor { class func colorWithHexStringSw (hex:String)-> UIColor { func hex2dec(num:String) -> Float { let str = num.uppercaseString var sum:Float = 0 for i in str.utf8 { sum = sum * 16 + Float(i) - 48 // 0-9 從48開始 if i >= 65 { // A-Z 從65開始,但有初始值10,所以應該是減去55 sum -= 7 } } return sum } var hexString = hex if (hexString.hasPrefix("#")) { hexString = (hexString as NSString).substringFromIndex(1) } let index = hexString.startIndex.advancedBy(2) let index2 = hexString.startIndex.advancedBy(4) let range = Range(index ..< index2) let s1:String = hexString.substringToIndex(index) let s2:String = hexString.substringWithRange(range) let s3 = hexString.substringFromIndex(index2) return UIColor(red:CGFloat(hex2dec(s1))/255.0, green:CGFloat(hex2dec(s2)) / 255.0, blue:CGFloat(hex2dec(s3)) / 255.0, alpha:1) } }
然後就可以直接呼叫了:
let color = UIColor.colorWithHexStringSw("#f4f4f4")
這樣就可以再整個工程裡隨便呼叫UIColor這個型別方法了~!