Swiftで16進数のカラーコードからUIColorに変換するextensionを書いた。

UIColor、毎回RGB指定で書くのが面倒なのでCSSみたいに16進数で指定して書けたら便利かなと思って作った。

import UIKit
import Foundation


func hexFromRGB(hex:String) -> (CGFloat,CGFloat,CGFloat,CGFloat) {
    var red: CGFloat   = 0.0
    var green: CGFloat = 0.0
    var blue: CGFloat  = 0.0
    var alpha: CGFloat = 1.0

    let index = advance(hex.startIndex, 1)
    let hexCode = hex.substringFromIndex(index)
    let scanner = NSScanner(string: hexCode)
    var hexValue: CUnsignedLongLong = 0
    if scanner.scanHexLongLong(&hexValue) {
        if count(hexCode) == 6 {
            red   = CGFloat((hexValue & 0xFF0000) >> 16) / 255.0
            green = CGFloat((hexValue & 0x00FF00) >> 8)  / 255.0
            blue  = CGFloat(hexValue & 0x0000FF) / 255.0
        } else if count(hexCode) == 8 {
            red   = CGFloat((hexValue & 0xFF000000) >> 24) / 255.0
            green = CGFloat((hexValue & 0x00FF0000) >> 16) / 255.0
            blue  = CGFloat((hexValue & 0x0000FF00) >> 8)  / 255.0
            alpha = CGFloat(hexValue & 0x000000FF)         / 255.0
        } else {
            print("err")
        }
    }

    return (red,green,blue,alpha)
}

extension UIColor {


    convenience init(hex: String = "") {
        var red: CGFloat  = 0.0
        var green: CGFloat = 0.0
        var blue: CGFloat  = 0.0
        var alpha: CGFloat = 1.0


        (red,green,blue,alpha) = hexFromRGB(hex)

         self.init(red:red, green:green, blue:blue, alpha:alpha)
    }
}


使い方は下のようになります。

self.view.backgroundColor = UIColor(hex: "#ee82ee")

かなり生産性上がると思う。

Related Contents

Pickup Contents