如何在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: ffffff
或ffffff
)
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值。
我可以看到它已经得到了答复,但仍然希望一个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")