Skip to content

Instantly share code, notes, and snippets.

@anthonyvitocuaderno
Created June 5, 2018 09:00
Show Gist options
  • Save anthonyvitocuaderno/3fb9f6317465e88dfd5bbb08b8381395 to your computer and use it in GitHub Desktop.
Save anthonyvitocuaderno/3fb9f6317465e88dfd5bbb08b8381395 to your computer and use it in GitHub Desktop.
iOS Swift 3.3 UIColor extension
import UIKit
extension UIColor {
convenience init(hex: String) {
self.init(hex: hex, alpha:1)
}
convenience init(hex: String, alpha: CGFloat) {
let hexWithoutSymbol = hex
let scanner = Scanner(string: hexWithoutSymbol)
var hexInt:UInt32 = 0x0
scanner.scanHexInt32(&hexInt)
var r:UInt32 = 255, g:UInt32 = 255, b:UInt32 = 255
switch (hexWithoutSymbol.count) {
case 3: // #RGB
r = ((hexInt >> 4) & 0xf0 | (hexInt >> 8) & 0x0f)
g = ((hexInt >> 0) & 0xf0 | (hexInt >> 4) & 0x0f)
b = ((hexInt << 4) & 0xf0 | hexInt & 0x0f)
break;
case 6: // #RRGGBB
r = (hexInt >> 16) & 0xff
g = (hexInt >> 8) & 0xff
b = hexInt & 0xff
break;
default:
printE("UIColor extension error failed convenience init(hex alpha)")
break
}
self.init(
red: (CGFloat(r) / 255),
green: (CGFloat(g) / 255),
blue: (CGFloat(b) / 255),
alpha:alpha)
}
class func randomFlatColor(index:Int = -1) -> UIColor {
let colors:[(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)] = [
(red: 210, green: 77, blue: 87, alpha: 1.0),
(red: 217, green: 30, blue: 24, alpha: 1.0),
(red: 150, green: 40, blue: 27, alpha: 1.0),
(red: 220, green: 198, blue: 224, alpha: 1.0),
(red: 103, green: 65, blue: 114, alpha: 1.0),
(red: 68, green: 108, blue: 179, alpha: 1.0),
(red: 210, green: 77, blue: 87, alpha: 1.0),
(red: 228, green: 241, blue: 254, alpha: 1.0),
(red: 65, green: 131, blue: 215, alpha: 1.0),
(red: 89, green: 171, blue: 227, alpha: 1.0),
(red: 129, green: 207, blue: 224, alpha: 1.0),
(red: 82, green: 179, blue: 217, alpha: 1.0),
(red: 197, green: 239, blue: 247, alpha: 1.0),
(red: 34, green: 167, blue: 240, alpha: 1.0),
(red: 52, green: 152, blue: 219, alpha: 1.0),
(red: 44, green: 62, blue: 80, alpha: 1.0),
(red: 25, green: 181, blue: 254, alpha: 1.0),
(red: 51, green: 110, blue: 123, alpha: 1.0),
(red: 34, green: 49, blue: 63, alpha: 1.0),
(red: 30, green: 139, blue: 195, alpha: 1.0),
(red: 58, green: 83, blue: 155, alpha: 1.0),
(red: 52, green: 73, blue: 94, alpha: 1.0),
(red: 103, green: 128, blue: 159, alpha: 1.0),
(red: 37, green: 116, blue: 169, alpha: 1.0),
(red: 31, green: 58, blue: 147, alpha: 1.0),
(red: 137, green: 196, blue: 244, alpha: 1.0),
(red: 75, green: 119, blue: 190, alpha: 1.0),
(red: 92, green: 151, blue: 191, alpha: 1.0),
(red: 78, green: 205, blue: 196, alpha: 1.0),
(red: 162, green: 222, blue: 208, alpha: 1.0),
(red: 135, green: 211, blue: 124, alpha: 1.0),
(red: 144, green: 198, blue: 149, alpha: 1.0),
(red: 38, green: 166, blue: 91, alpha: 1.0),
(red: 3, green: 201, blue: 169, alpha: 1.0),
(red: 104, green: 195, blue: 163, alpha: 1.0),
(red: 101, green: 198, blue: 187, alpha: 1.0),
(red: 27, green: 188, blue: 155, alpha: 1.0),
(red: 27, green: 163, blue: 156, alpha: 1.0),
(red: 102, green: 204, blue: 153, alpha: 1.0),
(red: 54, green: 215, blue: 183, alpha: 1.0),
(red: 200, green: 247, blue: 197, alpha: 1.0),
(red: 134, green: 226, blue: 213, alpha: 1.0),
(red: 46, green: 204, blue: 113, alpha: 1.0),
(red: 22, green: 160, blue: 133, alpha: 1.0),
(red: 63, green: 195, blue: 128, alpha: 1.0),
(red: 1, green: 152, blue: 117, alpha: 1.0),
(red: 3, green: 166, blue: 120, alpha: 1.0),
(red: 77, green: 175, blue: 124, alpha: 1.0),
(red: 42, green: 187, blue: 155, alpha: 1.0),
(red: 0, green: 177, blue: 106, alpha: 1.0),
(red: 30, green: 130, blue: 76, alpha: 1.0),
(red: 4, green: 147, blue: 114, alpha: 1.0),
(red: 38, green: 194, blue: 129, alpha: 1.0),
(red: 253, green: 227, blue: 167, alpha: 1.0),
(red: 248, green: 148, blue: 6, alpha: 1.0),
(red: 235, green: 149, blue: 50, alpha: 1.0),
(red: 232, green: 126, blue: 4, alpha: 1.0),
(red: 244, green: 178, blue: 80, alpha: 1.0),
(red: 242, green: 120, blue: 75, alpha: 1.0),
(red: 235, green: 151, blue: 78, alpha: 1.0),
(red: 254, green: 171, blue: 53, alpha: 1.0),
(red: 211, green: 84, blue: 0, alpha: 1.0),
(red: 243, green: 156, blue: 18, alpha: 1.0),
(red: 249, green: 105, blue: 14, alpha: 1.0),
(red: 249, green: 191, blue: 59, alpha: 1.0),
(red: 242, green: 121, blue: 53, alpha: 1.0),
(red: 230, green: 126, blue: 34, alpha: 1.0),
(red: 236, green: 236, blue: 236, alpha: 1.0),
(red: 108, green: 122, blue: 137, alpha: 1.0),
(red: 210, green: 215, blue: 211, alpha: 1.0),
(red: 238, green: 238, blue: 238, alpha: 1.0),
(red: 189, green: 195, blue: 199, alpha: 1.0),
(red: 236, green: 240, blue: 241, alpha: 1.0),
(red: 149, green: 165, blue: 166, alpha: 1.0),
(red: 218, green: 223, blue: 225, alpha: 1.0),
(red: 171, green: 183, blue: 183, alpha: 1.0),
(red: 242, green: 241, blue: 239, alpha: 1.0),
(red: 191, green: 191, blue: 191, alpha: 1.0)
]
var randomIndex = 0
if index >= 0 {
if index < colors.count {
randomIndex = index
} else {
randomIndex = index % (colors.count - 1)
}
} else {
randomIndex = Int(arc4random_uniform(UInt32(colors.count)))
}
let randomColor = colors[randomIndex]
return UIColor(
red: randomColor.red / 255,
green: randomColor.green / 255,
blue: randomColor.blue / 255,
alpha: randomColor.alpha)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment