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対応版。
stringByTrimmingCharactersInSet
が trimmingCharacters
に変更になっています。
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))
)
}