Skip to content

Instantly share code, notes, and snippets.

@prasenr
Last active July 27, 2018 08:06
Show Gist options
  • Select an option

  • Save prasenr/0b364014feedaabcead6e26d84abaf5b to your computer and use it in GitHub Desktop.

Select an option

Save prasenr/0b364014feedaabcead6e26d84abaf5b to your computer and use it in GitHub Desktop.
UIColor to Hex and Back
/*
Credits
=======
https://cocoacasts.com/from-hex-to-uicolor-and-back-in-swift
Usage
===========
let green = UIColor(hex: "12FF10")
let greenWithAlpha = UIColor(hex: "12FF10AC")
UIColor.blue.toHex
UIColor.orange.toHex()
UIColor.brown.toHex(with: true)
*/
import UIKit
extension UIColor {
// MARK: - Initialization
convenience init?(hex: String) {
var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
hexSanitized = hexSanitized.replacingOccurrences(of: "#", with: "")
var rgb: UInt32 = 0
var r: CGFloat = 0.0
var g: CGFloat = 0.0
var b: CGFloat = 0.0
var a: CGFloat = 1.0
let length = hexSanitized.count
guard Scanner(string: hexSanitized).scanHexInt32(&rgb) else { return nil }
if length == 6 {
r = CGFloat((rgb & 0xFF0000) >> 16) / 255.0
g = CGFloat((rgb & 0x00FF00) >> 8) / 255.0
b = CGFloat(rgb & 0x0000FF) / 255.0
} else if length == 8 {
r = CGFloat((rgb & 0xFF000000) >> 24) / 255.0
g = CGFloat((rgb & 0x00FF0000) >> 16) / 255.0
b = CGFloat((rgb & 0x0000FF00) >> 8) / 255.0
a = CGFloat(rgb & 0x000000FF) / 255.0
} else {
return nil
}
self.init(red: r, green: g, blue: b, alpha: a)
}
// MARK: - Computed Properties
var toHex: String? {
return toHex()
}
// MARK: - From UIColor to String
func toHex(alpha: Bool = false) -> String? {
guard let components = cgColor.components, components.count >= 3 else {
return nil
}
let r = Float(components[0])
let g = Float(components[1])
let b = Float(components[2])
var a = Float(1.0)
if components.count >= 4 {
a = Float(components[3])
}
if alpha {
return String(format: "%02lX%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255), lroundf(a * 255))
} else {
return String(format: "%02lX%02lX%02lX", lroundf(r * 255), lroundf(g * 255), lroundf(b * 255))
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment