Here are step-by-step guide to obtain UIColor:
1- Firstly you need to do is to remove all spaces and new line character sets from the string and then covert the string to UPPER Case example AABBCC.
var cString:String = hexColorString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString
2- Check if hexastring has hash(#) or not, If yes, then remove #.
if (cString.hasPrefix("#")) {
cString = (cString as NSString).substringFromIndex(1)
}
3- If obtained string has character count 6 then start trimming the hexa string in three parts else return any default color.
if (cString.characters.count != 6) {
return UIColor.grayColor() // Returning default graycolor, one can change to any color
}
let rString = (cString as NSString).substringToIndex(2) // first two are red
let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2) // next two are green
let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2) // rest are blue
4- Now use NSScanner class to converts the characters of an NSString object into number and string values. Once it’s done we can call “scanHexInt()” function that scans for an unsigned value from a hexadecimal representation, returning a found value by reference.
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)
5- Now you have unsigned value for all R,G,B which can be used to obtain UIColor as depicted below:
UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
Code Snippet
func colorWithHexString (hexColorString:String) -> UIColor {
// removing all spaces and new line character set and then coverting the string to UPPERCASE. example AABBCC
var cString:String = hexColorString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString
// checking if hex string contains #, If yes then consider the screen from index 1 otherwise 0
if (cString.hasPrefix("#")) {
cString = (cString as NSString).substringFromIndex(1)
}
// checking length of hexacolor, it should always be 6 else default color(say gray color) will be returned. one can change it to any color.
if (cString.characters.count != 6) {
return UIColor.grayColor()
}
let rString = (cString as NSString).substringToIndex(2) // first two are red
let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2) // next two are green
let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2) // rest are blue
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(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
}
0 Comment(s)