Swift - UIColor16进制编码与RGB格式互相转换
Swift UIColor 16进制编码转换RGB :
由于UI出图的时候,通常给的是16进制的编码颜色,我们在开发的时候需要将它转换为RGB格式,现在给出两种代码片段.
一、对UIColor进行扩展

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 }

二、简便方法,直接调用代码片段
个人推荐使用这个方法,创建一个宏定义文件

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)

在实际开发中,我们拿到的设计图上的颜色往往标注的是十六进制的,而在不添加第三方库的情况下 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
|
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 类型都可以
Swift - UIColor16进制编码与RGB格式互相转换的更多相关文章
- JavaScript16进制颜色值和rgb的转换
//十六进制颜色值域RGB格式颜色值之间的相互转换//十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; /*RGB颜色转换为1 ...
- .NET Core RSA 签名和验签(密钥为 16 进制编码)
使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...
- c# 字符串(含有汉字)转化为16进制编码(转)
public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text. ...
- java利用16进制来辨别png格式的图片
很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...
- LR编写Socket脚本方法1(XML/16进制报文data.ws格式)
本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...
- swift - 16进制颜色扩展(1.支持# 2.支持不带# , 3支持带0X)
/** * 设置16进制颜色: * 可识别类型 * 1:有# * 2:没有# * 3:含有0X */ extension UIColor{ class func hexadecimalColor(he ...
- Python实现:十进制数与(2~16进制数)之间的互相转换
(最开始源于牛客网上的一道编程题 : [编程题] 数制转换) 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) # 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) def ...
- YUYV格式到RGB格式的转换
为什么YUYV格式要转到RGB格式,视频的显示调用的多数API都是基于RGB格式,所以需要进行格式的转换. YUYV格式如下: Y0U0Y1V0 Y2U1Y3V1.......... 说明:一个Y代表 ...
- 解决python 保存json到文件时 中文显示16进制编码的问题
python 2.7 import codecs import json with codecs.open('Options.json', 'w', encoding='utf-8') as f: j ...
随机推荐
- Android中Shape的使用
先看一下文档对Shape Drawable的描述: Shape Drawable An XML file that defines a geometric shape, including color ...
- Linux文件计数
1.当前目录下的文件数 ls -l |grep "^-"|wc -l 2.当前目录的目录树 ls -l |grep "^d"|wc -l 3.当前目录文件数包含 ...
- Leetcode 230. Kth Smallest Element in a BST
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Not ...
- HTML中超出文本使用省略号替代的CSS样式
a{ display: block; /*定义显示形式*/ overflow: hidden; /*截取超出字符*/ text-overflow: ellipsis; /*超出字符以…代替*/ whi ...
- TypeError: 'bool' object is not callable g.user.is_authenticated()
此问题查了stackoverflow后知道is_authenticated是一个属性而不是一个方法所以g.user.is_authenticated() 用法会报错
- DiskFileItemFactory类的使用
将请求消息实体中的每一个项目封装成单独的DiskFileItem (FileItem接口的实现) 对象的任务由 org.apache.commons.fileupload.FileItemFact ...
- css3 动画效果 总结 不断完善~~
1.transition 动画过程改变某个css属性的效果 (比如宽高 颜色) 语法 transition: all 所有元素 + ...
- Json字符串和Json对象的简单总结
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率). ...
- [NHibernate]持久化类(Persistent Classes)
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 引言 持久化类是应用程序用来解决商业问题的类(比如,在电子交易程序中的Customer和Orde ...
- 使用excel结合线性规划求解Holt-Winters参数
其实上面这个是Holt-Winters无季节趋势模型, 上面的S(t)对应下面的a(t)——截距(平滑值) b(t)仍然对应b(t)——趋势,T对应k. ...