我正在尝试使用频谱javascript插件作为我创建的网站的颜色选择器,以便在我正在制作的iOS应用中创建UIColor对象。
Spectrum是一个方便的小颜色选择器: https://bgrins.github.io/spectrum/
可以在rgb / hex / hsv等中创建colo [u] r代码。但我也想使用Alpha - 所以我只能使用hsva或rgba
Spectrum会将这些作为输出 - 然后通过JSON发送到我的应用程序 - ' a'如果我在颜色选择器中设置透明度,仅会显示
hsva(325,28%,19%,0.68) hsv(325,28%,19%)
rgba(255,69,0,0.5) rgb(255,69,0)
当我不确定是否需要alpha组件时,如何使用正确的init方法解析数据并创建UIColor?
我以为我可以使用NSSCanner,但根据描述我读的Regex可能是更好的选择,因为输入是众所周知的
答案 0 :(得分:0)
所以玩了一些我已经走过这条路的想法 - 使用便利功能将第一个chracter / s与预期的格式相匹配,以自我初始化颜色
我发布这个作为获得有关这种特定方法的反馈的答案 - 我认为有一个更好的方法,我只是不知道足够发现。
func CGFloatValue(value: String) -> CGFloat {
guard let doubleValue = Double(value) else {
return CGFloat(0)
}
return CGFloat(doubleValue)
}
extension UIColor {
convenience init(unknownValue: String) {
var colorType, colorValue : String
if unknownValue.hasPrefix("#") {
//value is hex
colorType="hex"
colorValue=String(unknownValue.characters.dropFirst())
}
else {
let result = unknownValue.componentsSeparatedByString("(")
colorType = result[0]
colorValue = String(result[1].characters.dropLast())
}
print(colorType,colorValue)
let inputs = colorValue.componentsSeparatedByCharactersInSet(NSCharacterSet.punctuationCharacterSet())
switch(colorType) {
case "hsva":
self.init(hue: CGFloatValue(inputs[0]), saturation: CGFloatValue(inputs[1]), brightness: CGFloatValue(inputs[2]), alpha: CGFloatValue(inputs[3]))
break;
case "hex":
//this will be more complicated and based on hackingwithswift hex to uicolor article
//self.init(red:CGFloat((colour >> 24) & 0xff) / 255, green:CGFloat((colour >> 16) & 0xff)/ 255,blue:CGFloat(((colour >> 8) & 0xff))/ 255,alpha: CGFloat(colour & 0xff)) / 255
fallthrough
default:
//return a default color?
self.init(red: 255.0,green: 255.0,blue: 255.0,alpha: 1.0)
}
}
}