我如何从十六进制字符串格式创建一个UIColor,如#00FF00?


当前回答

您可以使用各种在线工具将HEX字符串转换为实际的UIColor。查看uicolor.org或UI颜色选择器。输出将被转换为Objective-C代码,如下所示:

[UIColor colorWithRed:0.93 green:0.80 blue:0.80 alpha:1.0];

可以嵌入到应用程序中。希望这能有所帮助!

其他回答

使用Xcode的原生颜色文字功能来轻松地添加十六进制颜色。

在你的代码中输入颜色文字,然后让Xcode自动完成剩下的工作。

颜色选择界面将允许你粘贴十六进制颜色:#FF9300

宏的git差异将显示RGB值而不是十六进制值:

let orange = #colorLiteral(red: 1, green: 0.5763723254, blue: 0, alpha: 1)

但它仍然是一种简单的方法来粘贴十六进制没有任何第三方工具或扩展。

为UIColor创建优雅的扩展:

extension UIColor {

convenience init(string: String) {

        var uppercasedString = string.uppercased()
        uppercasedString.remove(at: string.startIndex)

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

        let red = CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0
        let green = CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0
        let blue = CGFloat(rgbValue & 0x0000FF) / 255.0

        self.init(red: red, green: green, blue: blue, alpha: 1)
    }
}

创建红色:

let red = UIColor(string: "#ff0000") 

下面是Swift 1.2版本,作为UIColor的扩展。这允许你这样做

let redColor = UIColor(hex: "#FF0000")

我觉得这是最自然的做法。

extension UIColor {
  // Initialiser for strings of format '#_RED_GREEN_BLUE_'
  convenience init(hex: String) {
    let redRange    = Range<String.Index>(start: hex.startIndex.advancedBy(1), end: hex.startIndex.advancedBy(3))
    let greenRange  = Range<String.Index>(start: hex.startIndex.advancedBy(3), end: hex.startIndex.advancedBy(5))
    let blueRange   = Range<String.Index>(start: hex.startIndex.advancedBy(5), end: hex.startIndex.advancedBy(7))

    var red     : UInt32 = 0
    var green   : UInt32 = 0
    var blue    : UInt32 = 0

    NSScanner(string: hex.substringWithRange(redRange)).scanHexInt(&red)
    NSScanner(string: hex.substringWithRange(greenRange)).scanHexInt(&green)
    NSScanner(string: hex.substringWithRange(blueRange)).scanHexInt(&blue)

    self.init(
      red: CGFloat(red) / 255,
      green: CGFloat(green) / 255,
      blue: CGFloat(blue) / 255,
      alpha: 1
    )
  }
}

有cocoapod支持,这很好

https://github.com/mRs-/HexColors

// with hash
NSColor *colorWithHex = [NSColor colorWithHexString:@"#ff8942" alpha:1];

// wihtout hash
NSColor *secondColorWithHex = [NSColor colorWithHexString:@"ff8942" alpha:1];

// short handling
NSColor *shortColorWithHex = [NSColor colorWithHexString:@"fff" alpha:1]

你可以做这样的扩展

extension UIColor {
    convenience init(hex: UInt, alpha: CGFloat = 1) {
        self.init(
            red: CGFloat((hex & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((hex & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(hex & 0x0000FF) / 255.0,
            alpha: alpha
        )
    }
}

像这样用在任何地方

let color1 = UIColor(hex: 0xffffff)
let color2 = UIColor(hex: 0xffffff, alpha: 0.2)