2016-03-22 4 views
0

Я пытаюсь использовать плагин javascript спектра как средство выбора цвета для созданного мной веб-сайта для создания объектов UIColor внутри приложения iOS, которое я создаю.Превращение данных hsva() в UIColor в swift 2

Спектр представляет собой удобный маленький выбор цвета: https://bgrins.github.io/spectrum/

, который может создать Коло [и] г коды в RGB/шестнадцатеричный/ВПГ и т.д. Но я хочу использовать альфа, а также - так я ограничен используя либо 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)

как можно анализировать данные и создать UIColor с использованием правильный метод init, когда я не уверен, ожидать ли альфа-компонента?

Я думал, что я мог бы использовать NSScanner, но в соответствии с описанием я прочитал Regex может быть лучшим вариантом, так как вход хорошо известен

ответ

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

}