如何在Swift中使用UIColorFromRGB值

在iOS中,我们使用此代码为视图设置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中使用这个?

下面是该函数的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) 

我想说

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

但是这并没有奏效。

所以我用:
对于Swift

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

所以这是我find的解决方法。

我真的很喜欢内特·库克的回答,但是我想要一些更习惯的东西。 我相信这是一个非常好的用例,通过一个自定义的扩展方便初始化器。

 // 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类,而不是库。

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

如果你从一个string(不是hex)开始,这是一个函数,它需要一个hexstring并返回一个UIColor。
(您可以input任何格式的hexstring: ffffffffffff

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

用法:

 var color1 = hexStringToUIColor("#d3d3d3") 


资料来源: arshad / gist:de147c42d7b3063ef7bc

我已经迅速使用了以下内容。

 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) 

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

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

例如: self.view.backgroundColor = ColorLiteral 在这里输入图像说明

解决scheme为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) 

您不能在swift中使用像#define UIColorFromRGB(rgbValue)这样的复杂macros。 在swift中replace简单的macros是全局常量

 let FADE_ANIMATION_DURATION = 0.35 

仍然接受参数的复杂的macros不支持迅速。 你可以使用函数来代替

在C和Objective-C中使用复杂的macros,但在Swift中没有对应的macros。 复杂的macros是不定义常量的macros,包括括起来的函数式macros。 你在C和Objective-C中使用复杂的macros来避免types检查约束,或者避免重新input大量的样板代码。 但是,macros可能会使debugging和重构变得困难。 在Swift中,您可以使用函数和generics来获得相同的结果,而不会有任何妥协。 因此,C和Objective-C源文件中的复杂macros不能用于Swift代码。

摘录自使用cocoa和目标C的swift

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

你可以使用这个:

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

这对我来说是快速的。 尝试这个

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

内特·库克的答案是绝对正确的。 为了更大的灵活性,我将以下function保存在我的包中:

 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进行testing。

这是UIColor的一个很好的扩展。 在创buildUIColor对象时,可以使用枚举值(hex,string)和直接string值。

我们应该得到的扩展https://github.com/ioramashvili/UsefulExtensions/blob/master/Extensions.playground/Pages/UIColor.xcplaygroundpage/Contents.swift

我可以看到它已经得到了答复,但仍然希望一个class轮将有助于更好的方式。

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

更新::按照问题作者所解释的示例所做的更改,以提供hex值

在Swift3中,如果你已经select了一种颜色,你可以在线获取RGB值( http://imagecolorpicker.com ),并将这些值定义为UIColor。 这个解决scheme实现它们作为背景:

  @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

添加一个swift 3选项:

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

这可以通过使用这个初始化简单地完成

 view.backgroundColor = UIColor(hex: "067AB5")