【问题标题】:How to convert RGB values to HEX string iOS swift如何将RGB值转换为十六进制字符串iOS swift
【发布时间】:2018-03-07 11:32:15
【问题描述】:

我想将 RGB 值转换为十六进制字符串。我将 Hex 转换为 RGB,如下所示,反之亦然。

func hexStringToRGB(_ hexString: String) -> (red: CGFloat, green: CGFloat, blue: CGFloat) {
    var cString:String = hexString.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

    if (cString.hasPrefix("#")) {
        cString.remove(at: cString.startIndex)
    }

    if ((cString.count) != 6) {
        return (red: 0.0, green: 0.0, blue: 0.0)
    }

    var rgbValue:UInt32 = 0
    Scanner(string: cString).scanHexInt32(&rgbValue)

    return (
        red: CGFloat((rgbValue & 0xFF0000) >> 16),
        green: CGFloat((rgbValue & 0x00FF00) >> 8),
        blue: CGFloat(rgbValue & 0x0000FF))
}

【问题讨论】:

标签: ios swift uicolor


【解决方案1】:

@Cristik 是绝对正确的,除此之外,请在下面找到

使用这个 UIColor 扩展类,

extension UIColor {
    func toHexString() -> String {
        var r:CGFloat = 0
        var g:CGFloat = 0
        var b:CGFloat = 0
        var a:CGFloat = 0

        getRed(&r, green: &g, blue: &b, alpha: &a)

        let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0

        return NSString(format:"#%06x", rgb) as String
    }

    convenience init(red: Int, green: Int, blue: Int) {
        assert(red >= 0 && red <= 255, "Invalid red component")
        assert(green >= 0 && green <= 255, "Invalid green component")
        assert(blue >= 0 && blue <= 255, "Invalid blue component")

        self.init(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1.0)
    }

}

你会以这种方式得到你的输出,

let color = UIColor(red: 1, green: 2, blue: 3, alpha: 1.0)
let hexString = color.toHexString()

print(hexString);

你的输出将是这个,

#fffefd

如有任何疑问,请告诉我。

【讨论】:

    【解决方案2】:
    let rgbRedValue = 200
    let rgbGreenValue = 13
    let rgbBlueValue = 45
    
    let hexValue = String(format:"%02X", Int(rgbRedValue)) + String(format:"%02X", Int(rgbGreenValue)) + String(format:"%02X", Int(rgbBlueValue))
    

    另一种解决方法是将RGB 转换为UIColor 并从UIColor 获取HEX 字符串。

    【讨论】:

      【解决方案3】:

      斯威夫特 4:

      public static func rgbToHex(color: UIColor) -> String {
      
          var r:CGFloat = 0
          var g:CGFloat = 0
          var b:CGFloat = 0
          var a:CGFloat = 0
          color.getRed(&r, green: &g, blue: &b, alpha: &a)
      
          let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0
          return String(format: "#%06x", rgb)
      }
      

      【讨论】:

        猜你喜欢
        • 2011-04-06
        • 2020-02-22
        • 2018-01-22
        • 2013-02-07
        • 2015-02-06
        • 1970-01-01
        • 2012-02-03
        • 2012-10-15
        • 2015-07-23
        相关资源
        最近更新 更多