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 ...
随机推荐
- javascript学习笔记10----字符串的基本操作
1.字符串的基本操作如下: 定义字符串: var str = "Hello World!" 字符串的基本操作如下: str.length-----返回字符串长度,这里返回12 st ...
- .NET 学习书籍推荐
时间过得好快啊,转眼三月过了1周多了,今天把看书的目录记录下,方便初学者 最近由于项目需要研究下dotnet 技术,参考书籍如下: 1.深入理解C# 2.CLR via C# 3.Framework ...
- download ncRNA sequences form NCBI
#!/bin/bash usage() { echo;echo "Usage: ./`basename $0` [gi number list] [number of cpu]"; ...
- 【原】用css让一个容器水平垂直
这种css布局平时用的比较多,也是面试题常出的一个题,网上一搜一大丢,不过还是想自己总结一下. 这种方法比较多,本文只总结其中的几种,以便加深印象. 效果图都为这个: 方法一:position加mar ...
- WinForm------PanelControl控件中使用Pen类画角圆矩形方法
private void rightPanel_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; Pen p = ,, ...
- 11月14日用AJAX、PHP、SESSION做购物车
购物车网页代码 1.登录界面login.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- Unity unsafe
http://answers.unity3d.com/questions/23307/is-it-impossible-to-use-the-code-with-keyword-unsa.html 可 ...
- thinkphp分页二,分装到funciton.php
function.php代码 <?php /* 全局分页 * $table 数据表名 * $order 排序 * $pagesize 每页显示N个 * $where 查询条件 * $rollPp ...
- centos7删除自带openjdk
一些开发版的centos会自带jdk,我们一般用自己的jdk,把自带的删除.先看看有没有安装java -version [root@java-test-01 ~]# java -version ope ...
- centos 下测试网速
wget https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py chmod a+rx speedtest. ...