1. 程式人生 > >Swift開發 UIColor分類Hex顏色轉換

Swift開發 UIColor分類Hex顏色轉換

一般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這個型別方法了~!