[Swift]扩展UIColor:实现十六进制颜色字符串与UIColor之间的相互转换

对【UIColor】进行扩展

 1 import UIKit
 2
 3 extension UIColor {
 4
 5     // Hex String -> UIColor
 6     convenience init(hexString: String) {
 7         let hexString = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
 8         let scanner = Scanner(string: hexString)
 9
10         if hexString.hasPrefix("#") {
11             scanner.scanLocation = 1
12         }
13
14         var color: UInt32 = 0
15         scanner.scanHexInt32(&color)
16
17         let mask = 0x000000FF
18         let r = Int(color >> 16) & mask
19         let g = Int(color >> 8) & mask
20         let b = Int(color) & mask
21
22         let red   = CGFloat(r) / 255.0
23         let green = CGFloat(g) / 255.0
24         let blue  = CGFloat(b) / 255.0
25
26         self.init(red: red, green: green, blue: blue, alpha: 1)
27     }
28
29     // UIColor -> Hex String
30     var hexString: String? {
31         var red: CGFloat = 0
32         var green: CGFloat = 0
33         var blue: CGFloat = 0
34         var alpha: CGFloat = 0
35
36         let multiplier = CGFloat(255.999999)
37
38         guard self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {
39             return nil
40         }
41
42         if alpha == 1.0 {
43             return String(
44                 format: "#%02lX%02lX%02lX",
45                 Int(red * multiplier),
46                 Int(green * multiplier),
47                 Int(blue * multiplier)
48             )
49         }
50         else {
51             return String(
52                 format: "#%02lX%02lX%02lX%02lX",
53                 Int(red * multiplier),
54                 Int(green * multiplier),
55                 Int(blue * multiplier),
56                 Int(alpha * multiplier)
57             )
58         }
59     }
60 }

测试示例:

1 // 16进制颜色 -> UIColor
2 let color = UIColor(hexString: "#A1A1A1")
3 print("UIColor:", color)
4
5 // UIColor -> 16进制颜色
6 let hexString = color.hexString
7 print("16进制颜色值:", hexString ?? "")

测试结果:

1 UIColor: UIExtendedSRGBColorSpace 0.631373 0.631373 0.631373 1
2 16进制颜色值: #A1A1A1

原文地址:https://www.cnblogs.com/strengthen/p/10647238.html

时间: 2024-11-08 04:03:35

[Swift]扩展UIColor:实现十六进制颜色字符串与UIColor之间的相互转换的相关文章

速战速决 (6) - PHP: 获取 http 请求数据, 获取 get 数据 和 post 数据, json 字符串与对象之间的相互转换

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 获取 http 请求数据 获取 get 数据 和 post 数据 json 字符串与对象之间的相互转换 示例1.获取 http 请求数据http/http1.php <?php /** * 获取 http 请求数据 */ // 通过 $_SERVER 获取相关数据 echo "PHP_SELF : " . $_SERVER['PHP_SELF'] . "<br />"; echo &qu

将十六进制的颜色字符串转为UIColor

扩展UIColor,将十六进制的颜色字符串转成UIColor对象. extension UIColor { static func colorWithHexString(hex:String) -> UIColor { var cString:String = hex.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()).uppercaseString if cString.hasPr

16进制颜色字符串转为UIColor

//16进制颜色(html颜色值)字符串转为UIColor +(UIColor *) hexStringToColor: (NSString *) stringToConvert { NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString]; // String should be

iOS开发技巧(系列十八:扩展UIColor,支持十六进制颜色设置)

新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件, #import <UIKit/UIKit.h> #define RGBA_COLOR(R, G, B, A) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:A] #define RGB_COLOR(R, G, B) [UIColor co

iOS:扩展UIColor,支持十六进制颜色设置

来自转载:http://my.oschina.net/leejan97/blog/307491 摘要: 可以直接使用十六进制设置控件的颜色,而不必通过除以255.0进行转换 #define UIColor Category UIBarButtonItem 新建一个Category,命名为UIColor+Hex,表示UIColor支持十六进制Hex颜色设置. UIColor+Hex.h文件 #import <UIKit/UIKit.h> #define RGBA_COLOR(R, G, B, A

iOS开发之十六进制颜色数据转化为UIColor对象

1.若从服务器返回的颜色字符串数据为 hexColor:"09B57A" hexColor分为三部分:09.B5.7A 分别对应三色值 R.G.B 十六进制 十进制 00 0 01 1 ... ... 09 9 0A 10 0B 11 ... ... 0F 15 10 16 11 17 12 18 ... ... 1F 31 ...   FF 255         代码如下: 1 - (UIColor *)getColor:(NSString *)hexColor 2 { 3 uns

UIColor与十六进制字符串互转

UIColor转十六进制字符串 方法一:经过测试发现部分颜色会转化为#fffff(五个f),转化残缺导致最后颜色无法还原,不推荐使用. // UIColor转#ffffff格式的字符串 + (NSString *)hexFromUIColor:(UIColor *)color { if (CGColorGetNumberOfComponents(color.CGColor) < 4) { const CGFloat *components = CGColorGetComponents(color

16进制颜色(html颜色值)字符串转为UIColor

互联网 App 中经常会用到 html 颜色值转换 UIColor,比如:#FF9900.0XFF9900 等颜色字符串,以下方法可以将这些字符串转换为 UIColor 对象. + (UIColor *) colorWithHexString: (NSString *) stringToConvert    {     NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whi

实战c++中的string系列--十六进制的字符串转为十六进制的整型(一般是颜色代码使用)

非常久没有写关于string的博客了.由于写的差点儿相同了.可是近期又与string打交道,于是荷尔蒙上脑,小蝌蚪躁动. 在程序中,假设用到了颜色代码,一般都是十六进制的,即hex. 可是server给你返回一个颜色字符串.即hex string 你怎么把这个hex string 转为 hex,并在你的代码中使用? 更进一步,你怎么办把一个形如"#ffceed"的hex string 转为 RGB呢? 第一个问题在Java中是这样搞的: public static int parseC