在swift 2中将hsva()数据转换为UIColor

时间:2016-03-22 08:17:14

标签: ios regex

我正在尝试使用频谱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可能是更好的选择,因为输入是众所周知的

1 个答案:

答案 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)
    }
}

}