LoginSignup
21
20

More than 5 years have passed since last update.

Swift2.0でカラーコードからUIColorに変換

Last updated at Posted at 2015-11-22

Swift2.0でカラーコードからUIColorに変換

swiftでもObjective-Cでも、色指定をしたい場合
UIColorを使うのですがRGBで数値を設定しなきゃいけないのが非常に面倒臭い。

let color:UIColor = UIColor(red:0.0,green:0.5,blue:1.0,alpha:1.0)

UIColorの定義済みの色は
blackColor()
redColor()
greenColor()
...
等まあまあありますが限られているので、
HTML,CSSのように楽にカラーコードを指定しまくって好みの見栄えに!が
なかなか叶えられん訳です。
なのでカラーコードを設定したらUIColorに変換してくれるメソッドを用意してみる。
他でも紹介されていますが2.0対応で自分用に書いたもの↓

static func colorWithHexString (hex:String) -> UIColor {

        let cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString

        if ((cString as String).characters.count != 6) {
            return UIColor.grayColor()
        }

        let rString = (cString as NSString).substringWithRange(NSRange(location: 0, length: 2))
        let gString = (cString as NSString).substringWithRange(NSRange(location: 2, length: 2))
        let bString = (cString as NSString).substringWithRange(NSRange(location: 4, length: 2))

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        NSScanner(string: rString).scanHexInt(&r)
        NSScanner(string: gString).scanHexInt(&g)
        NSScanner(string: bString).scanHexInt(&b)

        return UIColor(
            red: CGFloat(Float(r) / 255.0),
            green: CGFloat(Float(g) / 255.0),
            blue: CGFloat(Float(b) / 255.0),
            alpha: CGFloat(Float(1.0))
        )
    }

呼ぶ際にはこれでOK。

colorWithHexString("FF1493")  //カラーコードを設定
colorWithHexString("000000")

20161120 追記

swift 3.0対応版。
stringByTrimmingCharactersInSettrimmingCharacters に変更になっています。

static func colorWithHexString (_ hex:String) -> UIColor {

        let cString = hex.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines).uppercased()

        if ((cString as String).characters.count != 6) {
            return UIColor.gray
        }

        let rString = (cString as NSString).substring(with: NSRange(location: 0, length: 2))
        let gString = (cString as NSString).substring(with: NSRange(location: 2, length: 2))
        let bString = (cString as NSString).substring(with: NSRange(location: 4, length: 2))

        var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
        Scanner(string: rString).scanHexInt32(&r)
        Scanner(string: gString).scanHexInt32(&g)
        Scanner(string: bString).scanHexInt32(&b)

        return UIColor(
            red: CGFloat(Float(r) / 255.0),
            green: CGFloat(Float(g) / 255.0),
            blue: CGFloat(Float(b) / 255.0),
            alpha: CGFloat(Float(1.0))
        )
    }

21
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
20