Swift - UIColor16进制编码与RGB格式互相转换

时间:2023-03-08 17:56:02
Swift - UIColor16进制编码与RGB格式互相转换

Swift UIColor 16进制编码转换RGB :

由于UI出图的时候,通常给的是16进制的编码颜色,我们在开发的时候需要将它转换为RGB格式,现在给出两种代码片段.

一、对UIColor进行扩展

Swift - UIColor16进制编码与RGB格式互相转换
 1 extension UIColor {
2
3 /**
4 Make color with hex string
5 - parameter hex: 16进制字符串
6 - returns: RGB
7 */
8 static func colorWithHexString (hex: String) -> UIColor {
9
10 var cString: String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString
11
12 if (cString.hasPrefix("#")) {
13 cString = (cString as NSString).substringFromIndex(1)
14 }
15
16 if (cString.characters.count != 6) {
17 return UIColor.grayColor()
18 }
19
20 let rString = (cString as NSString).substringToIndex(2)
21 let gString = ((cString as NSString).substringFromIndex(2) as NSString).substringToIndex(2)
22 let bString = ((cString as NSString).substringFromIndex(4) as NSString).substringToIndex(2)
23
24 var r:CUnsignedInt = 0, g:CUnsignedInt = 0, b:CUnsignedInt = 0;
25 NSScanner(string: rString).scanHexInt(&r)
26 NSScanner(string: gString).scanHexInt(&g)
27 NSScanner(string: bString).scanHexInt(&b)
28
29 return UIColor(red: CGFloat(r) / 255.0, green: CGFloat(g) / 255.0, blue: CGFloat(b) / 255.0, alpha: CGFloat(1))
30 }
31 }
Swift - UIColor16进制编码与RGB格式互相转换

二、简便方法,直接调用代码片段

个人推荐使用这个方法,创建一个宏定义文件

Swift - UIColor16进制编码与RGB格式互相转换
 1 func kRGBColorFromHex(rgbValue: Int) -> (UIColor) {
2
3 return UIColor(red: ((CGFloat)((rgbValue & 0xFF0000) >> 16)) / 255.0,
4 green: ((CGFloat)((rgbValue & 0xFF00) >> 8)) / 255.0,
5 blue: ((CGFloat)(rgbValue & 0xFF)) / 255.0,
6 alpha: 1.0)
7 }
8
9 可以这样调用
10 kRGBColorFromHex(0x1D1D26)
Swift - UIColor16进制编码与RGB格式互相转换

在实际开发中,我们拿到的设计图上的颜色往往标注的是十六进制的,而在不添加第三方库的情况下 UIColor 并不支持从十六进制数字初始化,手动将十六进制颜色转化为 RGB 形式十分浪费精力,我们可以通过为 UIColor 添加扩展的方式来支持直接从十六进制数值初始化从而为我们的开发带来便利。


1.添加文件

在项目中添加一个用于编写扩展代码的文件,将其命名为 UIColor+valueRGB.swift

2.添加扩展代码

在第一步创建的文件中添加如下代码:

import UIKit

extension UIColor {
//用数值初始化颜色,便于生成设计图上标明的十六进制颜色
convenience init(valueRGB: UInt, alpha: CGFloat) {
self.init(
red: CGFloat((valueRGB & 0xFF0000) >> 16) / 255.0,
green: CGFloat((valueRGB & 0x00FF00) >> 8) / 255.0,
blue: CGFloat(valueRGB & 0x0000FF) / 255.0,
alpha: alpha
)
}
}

3.调用

然后我们就可以在工程中以如下方式直接从十六进制数字初始化 UIColor 了:

let testColor = UIColor(valueRGB: 0x666666, alpha: 1.0)

Swift - UIColor使用自定义的RGB配色

1,比如rgb 色值为55、 186 、89 那么给UIColor设置里面要除以255
1
UIColor(red: 55/255, green: 186/255, blue: 89/255, alpha: 0.5)

2,设置16进制颜色也同上

1
UIColor(red: 0x37/255, green: 0xba/255, blue: 0x46/255, alpha: 0.5)
 

实际上这里没有做十六进制的限定,只需要是 UInt 类型都可以