我想出了以下解決方案,但想知道是否有人給它一個更簡潔的方法(在Xcode-遊樂場測試吧):什麼是在Swift中將UIColor轉換爲十六進制(網絡顏色)的最佳/最簡單的方法?
let colors = CGColorGetComponents(UIColor.greenColor().CGColor)
let hexCol:String = NSString(format: "#%02x%02x%02x", Int(colors[0] * 255.0), Int(colors[1] * 255.0), Int(colors[2] * 255.0))
resulting in #00ff00
其中UIColor.greenColor()是任何UIColor的例子。
編輯: 來自萊昂納多的答案,我覺得像重構一點(他的所有測試仍然適用)。
extension UIColor {
typealias RGBComponents = (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat)
typealias HSBComponents = (hue: CGFloat, saturation: CGFloat, brightness: CGFloat, alpha: CGFloat)
var rgbComponents:RGBComponents {
var c:RGBComponents = (0,0,0,0)
if getRed(&c.red, green: &c.green, blue: &c.blue, alpha: &c.alpha) {
return c
}
return (0,0,0,0)
}
var cssRGBA:String {
return String(format: "rgba(%d,%d,%d, %.02f)", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255), Float(rgbComponents.alpha))
}
var hexRGB:String {
return String(format: "#%02x%02x%02x", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255))
}
var hexRGBA:String {
return String(format: "#%02x%02x%02x%02x", Int(rgbComponents.red * 255), Int(rgbComponents.green * 255), Int(rgbComponents.blue * 255), Int(rgbComponents.alpha * 255))
}
var hsbComponents:HSBComponents {
var c:HSBComponents = (0,0,0,0)
if getHue(&c.hue, saturation: &c.saturation, brightness: &c.brightness, alpha: &c.alpha) {
return c
}
return (0,0,0,0)
}
}
let v1 = UIColor.redColor().rgbComponents.red
let v2 = UIColor.redColor().cssRGBA
let v3 = UIColor.redColor().hexRGBA
let v4test = UIColor.RGBComponents(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.0)
可能重複的[如何的UIColor轉換爲十六進制和顯示的NSLog](http://stackoverflow.com/questions/26341008/how-to-convert-uicolor-to-hex-and-display-in-nslog) – Fogmeister 2015-02-24 13:22:21
在該線程中給出的答案(其中,順便提一下,在Object中給出ive-C)與此問題中的代碼具有相同的問題:CGColorGetComponents()不一定返回RGBA組件的數組。對於灰度顏色,它返回一個只有一個灰色分量的數組(並且代碼崩潰)。 – 2015-02-24 13:38:49
@LeonardoSavioDabus:如果已從模式圖像創建UIColor,則* *認爲'getRed(_:green:blue:alpha:)'失敗。如果使用其他顏色空間(例如CMYK)從CIColor創建UIColor,則它*可能會失敗。我沒有測試它。 – 2015-02-24 13:59:33