2016-11-23 17 views
2

私はswiftとiOSで新しく、私は何をすべきか分からない。swift 3文字列の色をcgcolorに変換する

私は、バックエンドから来るの色を持っていると私はJSONからそれを変換した後CGColor配列を渡すためにここに何をすべきCGColor

"colors": [ 
     "6909A1", 
     "7552D1", 
     "59B0DC", 
     "62E3CC" 
     ], 

func drawGradient(colors: [CGColor]) { 
     addLayer(colors: colors) 
    } 

に変換します。 簡単な文字列からCGColorを得る方法を見つけることができませんでした

+2

種々のステップこの方法を試してみてください:六角文字列からUIColorを作成する方法を見て、その後、 'UIColor'は、プロパティを持っています'CGColor'(これは使用するもの)です。 – Larme

答えて

1

UIntは、利便性を持っています今、色配列

に文字列配列をマッピングし、その進値に

func color(from hexString : String) -> CGColor 
{ 
    if let rgbValue = UInt(hexString, radix: 16) { 
    let red = CGFloat((rgbValue >> 16) & 0xff)/255 
    let green = CGFloat((rgbValue >> 8) & 0xff)/255 
    let blue = CGFloat((rgbValue  ) & 0xff)/255 
    return UIColor(red: red, green: green, blue: blue, alpha: 1.0).cgColor 
    } else { 
    return UIColor.black.cgColor 
    } 
} 

を16進文字列を変換する初期化子10

let hexColors = ["6909A1", "7552D1", "59B0DC", "62E3CC"] 

let gradientColors = hexColors.map { color(from:$0) } 

または代わりUIColor延長で

extension UIColor { 

    convenience init(hexString : String) 
    { 
     if let rgbValue = UInt(hexString, radix: 16) { 
      let red = CGFloat((rgbValue >> 16) & 0xff)/255 
      let green = CGFloat((rgbValue >> 8) & 0xff)/255 
      let blue = CGFloat((rgbValue  ) & 0xff)/255 
      self.init(red: red, green: green, blue: blue, alpha: 1.0) 
     } else { 
      self.init(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0) 
     } 
    } 
} 

let hexColors = ["6909A1", "7552D1", "59B0DC", "62E3CC"] 

let gradientColors = hexColors.map { UIColor(hexString:$0).cgColor } 
+0

ありがとう@vadian。それはまさに私が探しているものです – pmb

1

16進文字列からUIColor/CGColorオブジェクトを作成する能力はSwiftに組み込まれていません。ただし、単にそれを追加するプロジェクトにこの拡張機能を配置することができます:

extension UIColor { 
    public convenience init?(hexString: String) { 
     let r, g, b, a: CGFloat 

     if hexString.hasPrefix("#") { 
      let start = hexString.index(hexString.startIndex, offsetBy: 1) 
      let hexColor = hexString.substring(from: start) 

      if hexColor.characters.count == 8 { 
       let scanner = Scanner(string: hexColor) 
       var hexNumber: UInt64 = 0 

       if scanner.scanHexInt64(&hexNumber) { 
        r = CGFloat((hexNumber & 0xff000000) >> 24)/255 
        g = CGFloat((hexNumber & 0x00ff0000) >> 16)/255 
        b = CGFloat((hexNumber & 0x0000ff00) >> 8)/255 
        a = CGFloat(hexNumber & 0x000000ff)/255 

        self.init(red: r, green: g, blue: b, alpha: a) 
        return 
       } 
      } 
     } 

     return nil 
    } 
} 

次にあなたがCGColorアレイにそのヘクスの色配列を変換するために、このような何かを行うことができます:

func convertColours() { 
    let stringColours = ["6909A1", 
         "7552D1", 
         "59B0DC", 
         "62E3CC"] 
    var colours = [CGColor]() 

    for stringColour in stringColours { 
     if let colour = UIColor(hexString: stringColour) { 
      colours.append(colour.cgColor) 
     } 
    }   
} 
0

extension UIColor { 
    convenience init(red: Int, green: Int, blue: Int) { 
     self.init(red: CGFloat(red)/255.0, green: CGFloat(green)/255.0, blue: CGFloat(blue)/255.0, alpha: 1.0) 
    } 

    func color(with hex: Int) -> CGColor { 
     let color = UIColor(red:(hex >> 16) & 0xff, green:(hex >> 8) & 0xff, blue:hex & 0xff) 
     return color.cgColor 
    } 
} 
UIColor().color(with: Int(stringColours[0], radix: 16)!) 
UIColor().color(with: 0x333333) 
関連する問題