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 ...
随机推荐
- css实现了hover显示title的效果
<div data-title="hello, world">hello...</div> <style> div { position: re ...
- 一分钟读懂MySQL分布式消息的处理
在很多MYSQL环境中,对于MYSQL的分布式事物处理一直是个难题,在当前互联网环境中,大多数应用系统是基于SOA的很多复杂接口之间的调用,并且事物之间的处理优先级也是有先后的,所以对于实际入库的数据 ...
- 前端ps常用的小技巧
一些很简单的例子,知道的就当看乐子. 1.T 是文字的 可以从矢量图中查看文字的大小 字体 颜色,具体就是T 选择一段文字,点确定,点击属性栏最后一个可以看详细信息.又字体,行高,颜色.如果要选取 ...
- LNMP源码编译安装(centos7+nginx1.9+mysql5.6+php7)
1.准备工作: 1)把所有的软件安装在/Data/apps/,源码包放在/Data/tgz/,数据放在/Data/data,日志文件放在/Data/logs,项目放在/Data/webapps, mk ...
- 移植eac3音频库
2016-5-26 移植eac3音频库,从ffmpeg库中移植.经过验证是切实可行的. 感觉开源软件就是时间黑洞,有多少时间搭进去都不为过.已经3周过去了,ffmpeg还是没有熟悉完. 真正的移植工作 ...
- 前端模块化工具-webpack
详解前端模块化工具-webpack webpack是一个module bundler,抛开博大精深的汉字问题,我们暂且管他叫'模块管理工具'.随着js能做的事情越来越多,浏览器.服务器,js似乎无处不 ...
- oracle---jdbctest--laobai
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.ResultSet; import ora ...
- Effective java读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...
- Node.js Stream-基础篇
Node.js Stream - 基础篇 邹斌 ·2016-07-08 11:51 背景 在构建较复杂的系统时,通常将其拆解为功能独立的若干部分.这些部分的接口遵循一定的规范,通过某种方式相连,以共同 ...
- DataTable数据检索的性能分析(转寒江独钓)
我们知道在.NET平台上有很多种数据存储,检索解决方案-ADO.NET Entity Framework,ASP.NET Dynamic Data,XML, NHibernate,LINQ to SQ ...