如何在Swift中使用UIColorFromRGB?

时间:2014-06-06 04:38:14

标签: ios swift

在Objective-C中,我们使用此代码为视图设置RGB颜色代码:

#define UIColorFromRGB(rgbValue)        
[UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

view.backgroundColor=UIColorFromRGB(0x209624);

如何在Swift中使用它?

21 个答案:

答案 0 :(得分:166)

这是该函数的Swift版本(用于获取UInt值的UIColor表示形式):

func UIColorFromRGB(rgbValue: UInt) -> UIColor {
    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

view.backgroundColor = UIColorFromRGB(0x209624)

答案 1 :(得分:121)

我想放

cell.backgroundColor = UIColor.colorWithRed(125/255.0, green: 125/255.0, blue: 125/255.0, alpha: 1.0)  

但这不起作用。

所以我用过: For Swift

cell.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1.0)  

所以这是我找到的解决方法。

答案 2 :(得分:62)

我真的很喜欢Nate Cook的答案,但我想要一些更惯用的东西。我相信通过自定义扩展,这是一个非常好的便利初始化器用例。

// UIColorExtensions.swift
import Foundation
import UIKit

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

现在可以这样使用:

view.backgroundColor = UIColor(rgb: 0x209624)

我只建议在你自己的客户端代码中修补像这样的UIKit类,而不是库。

答案 3 :(得分:43)

myLabel.backgroundColor = UIColor(red: 50.0/255, green: 150.0/255, blue: 65.0/255, alpha: 1.0)

答案 4 :(得分:32)

以编程方式添加颜色的最简单方法是使用 ColorLiteral

只需添加属性ColorLiteral,如示例所示,Xcode将提示您可以选择的整个颜色列表。这样做的好处是代码较少,添加HEX值或RGB 。您还将从故事板中获取最近使用的颜色。

示例: self.view.backgroundColor = ColorLiteral enter image description here

答案 5 :(得分:27)

如果您从字符串(非十六进制)开始,这是一个采用十六进制字符串并返回UIColor的函数。
(您可以使用以下格式输入十六进制字符串:#ffffffffffff

<强>用法:

var color1 = hexStringToUIColor("#d3d3d3")

Swift 4:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

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

    if ((cString.count) != 6) {
        return UIColor.gray
    }

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

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

斯威夫特3:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased()

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

    if ((cString.characters.count) != 6) {
        return UIColor.gray
    }

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

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}

Swift 2:

func hexStringToUIColor (hex:String) -> UIColor {
    var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet() as NSCharacterSet).uppercaseString

    if (cString.hasPrefix("#")) {
      cString = cString.substringFromIndex(cString.startIndex.advancedBy(1))
    }

    if ((cString.characters.count) != 6) {
      return UIColor.grayColor()
    }

    var rgbValue:UInt32 = 0
    NSScanner(string: cString).scanHexInt(&rgbValue)

    return UIColor(
        red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0,
        green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0,
        blue: CGFloat(rgbValue & 0x0000FF) / 255.0,
        alpha: CGFloat(1.0)
    )
}



来源:arshad/gist:de147c42d7b3063ef7bc

答案 6 :(得分:10)

对于 Xcode 9 ,请使用带有RGB值的UIColor

shareBtn.backgroundColor = UIColor( red: CGFloat(92/255.0), green: CGFloat(203/255.0), blue: CGFloat(207/255.0), alpha: CGFloat(1.0) )

预览:

button preview with custom RGB color

请参阅其他Apple documentation on UIColor

答案 7 :(得分:5)

我在swift中使用了以下内容。

let appRedColor = UIColor(red: 200.0/255.0, green: 16.0/255.0, blue: 46.0/255.0, alpha: 1.0)
let appSilverColor = UIColor(red: 236.0/255.0, green: 236.0/255.0, blue: 236.0/255.0, alpha: 1.0)
let appWhiteColor = UIColor(red: 255.0/255.0, green: 255.0/255.0, blue: 255.0/255.0, alpha: 1.0)
let appNavyColor = UIColor(red: 19.0/255.0, green: 41.0/255.0, blue: 75.0/255.0, alpha: 1.0)

答案 8 :(得分:3)

argb格式的解决方案:

//  UIColorExtensions.swift
import UIKit
extension UIColor {

    convenience init(argb: UInt) {
        self.init(
            red: CGFloat((argb & 0xFF0000) >> 16) / 255.0,
            green: CGFloat((argb & 0x00FF00) >> 8) / 255.0,
            blue: CGFloat(argb & 0x0000FF) / 255.0,
            alpha: CGFloat((argb & 0xFF000000) >> 24) / 255.0
        )
    }
}

用法:

var clearColor: UIColor = UIColor.init(argb: 0x00000000)
var redColor: UIColor = UIColor.init(argb: 0xFFFF0000)

答案 9 :(得分:3)

Swift 4中的UIColorFromRGB

button.layer.backgroundColor = UIColor(red: 112.0/255, green: 86.0/255, blue: 164.0/255, alpha: 1.0).cgColor

答案 10 :(得分:3)

添加swift 3选项:

cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor

答案 11 :(得分:3)

这对我来说非常有用。试试这个

bottomBorder.borderColor = UIColor (red: 255.0/255.0, green: 215.0/255.0, blue: 60/255.0, alpha: 1.0).CGColor

答案 12 :(得分:2)

你不能在swift中使用像#define UIColorFromRGB(rgbValue)这样的复杂宏。在swift中替换简单宏是像

这样的全局常量
let FADE_ANIMATION_DURATION = 0.35

swift不支持接受参数的复杂宏。你可以改用函数

  

复杂的宏在C和Objective-C中使用,但在Swift中没有对应的。复杂的宏是不定义常量的宏,包括带括号的,类似函数的宏。您可以在C和Objective-C中使用复杂的宏来避免类型检查约束或避免重新输入大量的样板代码。但是,宏可能使调试和重构变得困难。在Swift中,您可以使用函数和泛型来实现相同的结果,而不会有任何妥协。因此,C和Objective-C源文件中的复杂宏不可用于Swift代码。

摘自Using swift with cocoa and objective C

检查@Nate Cooks在这里使用的函数的Swift版本的答案

答案 13 :(得分:2)

您可以使用:

//The color RGB #85CC4B
let newColor = UIColor(red: CGFloat(0x85)/255
                      ,green: CGFloat(0xCC)/255
                      ,blue: CGFloat(0x4B)/255
                      ,alpha: 1.0)

答案 14 :(得分:1)

Nate Cook的回答绝对正确。 为了获得更大的灵活性,我在我的包中保留了以下功能:

func getUIColorFromRGBThreeIntegers(red: Int, green: Int, blue: Int) -> UIColor {
    return UIColor(red: CGFloat(Float(red) / 255.0),
        green: CGFloat(Float(green) / 255.0),
        blue: CGFloat(Float(blue) / 255.0),
        alpha: CGFloat(1.0))
}

func getUIColorFromRGBHexValue(value: Int) -> UIColor {
    return getUIColorFromRGBThreeIntegers(red: (value & 0xFF0000) >> 16,
        green: (value & 0x00FF00) >> 8,
        blue: value & 0x0000FF)
}

func getUIColorFromRGBString(value: String) -> UIColor {
    let str = value.lowercased().replacingOccurrences(of: "#", with: "").
        replacingOccurrences(of: "0x", with: "");
        return getUIColorFromRGBHexValue(value: Int(str, radix: 16)!);
}

这就是我使用它们的方式:

// All three of them are identical:
let myColor1 = getUIColorFromRGBHexValue(value: 0xd5a637)
let myColor2 = getUIColorFromRGBString(value: "#D5A637")
let myColor3 = getUIColorFromRGBThreeIntegers(red: 213, green: 166, blue: 55)

希望这会有所帮助。 一切都使用Swift 3 / Xcode 8进行测试。

答案 15 :(得分:0)

我可以看到它已经得到了解答,但仍然希望一个班轮能够以更好的方式提供帮助。

import UIKit

let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255, 
                            green: CGFloat((rgbValue & 0x00FF00) >> 8)/255, 
                            blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)

已更新::根据问题作者提供的示例所做的更改,以提供十六进制值

答案 16 :(得分:0)

在Swift3中,如果您使用已选择的颜色开始,则可以在线获取RGB值(http://imagecolorpicker.com)并使用定义为UIColor的值。该解决方案将它们作为背景实现:

    @IBAction func blueBackground(_ sender: Any) {
        let blueColor = UIColor(red: CGFloat(160/255), green: CGFloat(183.0/255), blue: CGFloat(227.0/255), alpha: 1)
        view.backgroundColor = blueColor

@Vadym在评论中提到了这一点,重要的是用一个小数点定义CGFloat

答案 17 :(得分:0)

这是UIColor的一个很好的扩展。创建UIColor对象时,可以使用枚举值(十六进制,字符串)和直接字符串值。

我们应得的延伸 https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift

答案 18 :(得分:0)

import Cocoa
class ViewController: NSViewController{
     override func viewDidLoad() {
            super.viewDidLoad()
    self.view.wantsLayer = true
    self.view.layer?.backgroundColor = NSColor(hexString: "#4d9b48").cgColor

}
extension NSColor {

            convenience init(hexString: String, alpha: CGFloat = 1.0) {
                  let hexString: String = hexString.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
                  let scanner = Scanner(string: hexString)
                  if (hexString.hasPrefix("#")) {
                      scanner.scanLocation = 1
                  }
                  var color: UInt32 = 0
                  scanner.scanHexInt32(&color)
                  let mask = 0x000000FF
                  let r = Int(color >> 16) & mask
                  let g = Int(color >> 8) & mask
                  let b = Int(color) & mask
                  let red   = CGFloat(r) / 255.0
                  let green = CGFloat(g) / 255.0
                  let blue  = CGFloat(b) / 255.0
                  self.init(red:red, green:green, blue:blue, alpha:alpha)
              }
              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 String(format:"#%06x", rgb)

            }
        }

答案 19 :(得分:0)

https://uiwjs.github.io/ui-color/

SwiftUI

Color(red: 1.33, green: 0.56, blue: 0.56).opacity(0.61)

iOS 版 Swift

UIColor(red: 1.33, green: 0.56, blue: 0.56, alpha: 0.61)

适用于 macOS 的 Swift

NSColor(red: 1.33, green: 0.56, blue: 0.56, alpha: 0.61)

iOS 目标 C

[UIColor colorWithRed: 1.33 green: 0.56 blue: 0.56 alpha: 0.61];

适用于 macOS 的 Objective-C

[NSColor colorWithCalibratedRed: 1.33 green: 0.56 blue: 0.56 alpha: 0.61];

enter image description here

答案 20 :(得分:0)

Swift 5 ++

只需使用此扩展程序

 extension UIColor {
     convenience init(r: CGFloat,g:CGFloat,b:CGFloat,a:CGFloat = 1) {
         self.init(
             red: r / 255.0,
             green: g / 255.0,
             blue: b / 255.0,
             alpha: a
         )
     }
 }

使用

 // Example 1
 let color = UIColor(r: 255.0, g: 152.0, b: 56.0)

 // Example 2
 let color2 = UIColor(r: 255.0, g: 152.0, b: 56.0,a: 1.0)