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,比如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 类型都可以

Swift - UIColor16进制编码与RGB格式互相转换的更多相关文章

  1. JavaScript16进制颜色值和rgb的转换

    //十六进制颜色值域RGB格式颜色值之间的相互转换//十六进制颜色值的正则表达式 var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; /*RGB颜色转换为1 ...

  2. .NET Core RSA 签名和验签(密钥为 16 进制编码)

    使用 OpenSSL 生成公私钥对,命令: $ openssl genrsa -out rsa_1024_priv.pem $ openssl pkcs8 -topk8 -inform PEM -in ...

  3. c# 字符串(含有汉字)转化为16进制编码(转)

    public static string Str2Hex(string s) { string result = string.Empty; byte[] arrByte = System.Text. ...

  4. java利用16进制来辨别png格式的图片

    很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...

  5. LR编写Socket脚本方法1(XML/16进制报文data.ws格式)

    本文主要讲述了Socket协议脚本的基础知识和编写方法,让大家能够在短时间内快速掌握简单的Socket协议脚本的编写方法.1.socket协议介绍Socket协议有万能协议之称,很多系统底层都是用的s ...

  6. swift - 16进制颜色扩展(1.支持# 2.支持不带# , 3支持带0X)

    /** * 设置16进制颜色: * 可识别类型 * 1:有# * 2:没有# * 3:含有0X */ extension UIColor{ class func hexadecimalColor(he ...

  7. Python实现:十进制数与(2~16进制数)之间的互相转换

    (最开始源于牛客网上的一道编程题 : [编程题] 数制转换) 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) # 将X进制转为int十进制的功能函数:(乘X次方各位数的加和法) def ...

  8. YUYV格式到RGB格式的转换

    为什么YUYV格式要转到RGB格式,视频的显示调用的多数API都是基于RGB格式,所以需要进行格式的转换. YUYV格式如下: Y0U0Y1V0 Y2U1Y3V1.......... 说明:一个Y代表 ...

  9. 解决python 保存json到文件时 中文显示16进制编码的问题

    python 2.7 import codecs import json with codecs.open('Options.json', 'w', encoding='utf-8') as f: j ...

随机推荐

  1. AOPR软件最小化消失了

    结合日常使用软件的经历,我们都是选择最小化按钮后,点击状态栏中最小化图标即可恢复软件窗口.在使用Advanced Office Password Recovery的过程中,有时会出现点击最小化按钮后在 ...

  2. ORB-SLAM(一)简介

    ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1].该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在I ...

  3. Flyme适配源码更新命令,轻松完成打包

    第一次已经同步了所有源码(花了很长时间),第一次已经连接手机进行了插桩和解reject,那么第二次还需要这么麻烦吗?答案是:NO ! 1.官方源码,执行如下命令可以实现: repo sync -c 2 ...

  4. poj 3680 Intervals

    给定N个带权的开区间,第i个区间覆盖区间(ai,bi),权值为wi.现在要求挑出一些区间使得总权值最大,并且满足实轴上任意一个点被覆盖不超过K次. 1<=K<=N<=200.1< ...

  5. AI贪吃蛇(二)

    前言 之前写过一篇关于贪吃蛇AI的博客,当时虽然取得了一些成果,但是也存在许多问题,所以最近又花了三天时间重新思考了一下.以下是之前博客存在的一些问题: 策略不对,只要存在找不到尾巴的情况就可能失败, ...

  6. Alpha阶段第二次Scrum Meeting

    情况简述 Alpha阶段第一次Scrum Meeting 敏捷开发起始时间 2016/10/21 00:00 敏捷开发终止时间 2016/10/22 00:00 会议基本内容摘要 汇报了已经完成的任务 ...

  7. Codeforces 2016 ACM Amman Collegiate Programming Contest A. Coins(动态规划/01背包变形)

    传送门 Description Hasan and Bahosain want to buy a new video game, they want to share the expenses. Ha ...

  8. Protocol Framework - SNMP Tutorial

    30.4 Protocol Framework TCP/IP network management protocols2 divide the management problem into two ...

  9. Dom4j把xml转换成Map(固定格式)

    /** * 可解析list * * @param fileName * @return * @throws Exception */ @SuppressWarnings("unchecked ...

  10. awk 的使用方法

    awk 的使用方法 我们知道 awk 的常用变量包括: $0 当前记录(这个变量中存放着整个行的内容) $1~$n 当前记录的第 n个字段,字段间由 FS 分隔 NF 当前记录中的字段个数,就是有多少 ...