Ios 如何在Swift中使用UIColorFromRGB?
在Objective-C中,我们使用此代码为视图设置RGB颜色代码:Ios 如何在Swift中使用UIColorFromRGB?,ios,swift,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
#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中使用类似于
#define UIColorFromRGB(rgbValue)
的复杂宏。swift中简单宏的替换是全局常量,如
let FADE_ANIMATION_DURATION = 0.35
swift仍然不支持接受参数的复杂宏。您可以使用函数来代替
复杂宏在C和Objective-C中使用,但在Swift中没有对应的宏。复杂宏是不定义常量的宏,包括括号内的函数式宏。在C和Objective-C中使用复杂的宏以避免类型检查约束或避免重新键入大量样板代码。然而,宏会使调试和重构变得困难。在Swift中,您可以使用函数和泛型来实现相同的结果,而不会有任何妥协。因此,Swift代码无法使用C和Objective-C源文件中的复杂宏
摘自
检查@Nate Cooks answer以获取此处要使用的该函数的快速版本这是该函数的快速版本(用于获取
UInt
值的UIColor表示):
我想把
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)
这就是我找到的解决办法。我很喜欢内特·库克的答案,但我想要更地道一点的。我相信这是一个非常好的用例,通过自定义扩展方便地初始化
// 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类进行monkey修补。如果您是从字符串(而不是十六进制)开始的,这是一个接受十六进制字符串并返回UIColor的函数。
(您可以使用以下格式输入十六进制字符串:
#ffffff
或ffffff
)
用法:
var color1 = hexStringToUIColor("#d3d3d3")
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)
)
}
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)
)
}
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)
)
}
Swift 4:
var color1 = hexStringToUIColor("#d3d3d3")
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)
)
}
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)
)
}
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)
)
}
Swift 3:
var color1 = hexStringToUIColor("#d3d3d3")
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)
)
}
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)
)
}
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)
)
}
Swift 2:
var color1 = hexStringToUIColor("#d3d3d3")
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)
)
}
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)
)
}
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)
)
}
来源:我在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)
这可以通过使用此初始化简单地完成
view.backgroundColor = UIColor(hex: "067AB5")
您可以使用以下选项:
//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
这是UIColor的一个很好的扩展。创建UIColor对象时,可以使用枚举值(十六进制、字符串)和直接字符串值 我们应得的延期
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)
我可以看到它已经得到了回答,但仍然希望一艘班轮将有助于更好的方式
import UIKit
let requiredColor = UIColor(red: CGFloat((rgbValue & 0xFF0000) >> 16)/255,
green: CGFloat((rgbValue & 0x00FF00) >> 8)/255,
blue: CGFloat(rgbValue & 0x0000FF)/255, alpha :1)
更新::根据问题作者解释的示例进行更改,以在Swift3中提供十六进制值,如果您从已经选择的颜色开始,您可以在线获取RGB值(),并使用定义为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非常重要,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进行测试。以编程方式添加颜色的最简单方法是使用ColorLiteral 只需添加属性ColorLiteral,如示例所示,Xcode将提示您一个完整的颜色列表,您可以选择。这样做的好处是代码更少,添加十六进制值或RGB。您还将从情节提要中获取最近使用的颜色 示例:
self.view.backgroundColor=ColorLiteral添加swift 3选项:
cell.layer.borderColor = UIColor (red: 192.0/255.0, green: 192.0/255.0, blue: 197/255.0, alpha: 1.0).cgColor
对于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) )
预览:
请参阅Swift 4中的附加。UIColorFromRGB
导入可可粉
类ViewController:NSViewController{
重写func viewDidLoad(){
super.viewDidLoad()
self.view.wantsLayer=true
self.view.layer?.backgroundColor=NSColor(十六进制字符串:“#4d9b48”).cgColor
}
分色{
便利初始化(hexString:String,alpha:CGFloat=1.0){
让hexString:String=hexString.trimmingCharacters(在:CharacterSet.whitespaces和newlines中)
let scanner=scanner(字符串:hexString)
if(hexString.hasPrefix(“#”){
scanner.scanLocation=1
}
变量颜色:UInt32=0
scanner.scanHexInt32(&color)
设掩码=0x000000FF
设r=Int(颜色>>16)和掩码
设g=Int(颜色>>8)和掩码
设b=Int(颜色)和mask
设红色=CGFloat(r)/255.0
设绿色=CGFloat(g)/255.0
设blue=CGFloat(b)/255.0
self.init(红色:红色,绿色:绿色,蓝色:蓝色,阿尔法:阿尔法)
}
func toHexString()->String{
变量r:CGFloat=0
变量g:CGFloat=0
变量b:CGFloat=0
变量a:CGFloat=0
红色(&r,绿色:&g,蓝色:&b,阿尔法:&a)
设rgb:Int=(Int)(r*255)
迅捷
颜色(红色:1.33,绿色:0.56,蓝色:0.56)。不透明度(0.61)
iOS的Swift
UIColor(红色:1.33,绿色:0.56,蓝色:0.56,阿尔法:0.61)
马科斯的斯威夫特
NSColor(红色:1.33,绿色:0.56,蓝色:0.56,阿尔法:0.61)
iOS的目标-C
[UIColor color with red:1.33绿色:0.56蓝色:0.56阿尔法:0.61];
macOS的Objective-C
[NSColor color with calibered:1.33绿色:0.56蓝色:0.56阿尔法:0.61];
检查此let color:UIColor=UIColor(红色:CGFloat(0/255.0)、绿色:CGFloat(110/255.0)、b