1. UIColor转十六进制字符串
  2.  
  3. 方法一:经过测试发现部分颜色会转化为#fffff(五个f),转化残缺导致最后颜色无法还原,不推荐使用。
  4.  
  5. // UIColor转#ffffff格式的字符串
  6. + (NSString *)hexFromUIColor:(UIColor *)color
  7. {
  8. if (CGColorGetNumberOfComponents(color.CGColor) < ) {
  9. const CGFloat *components = CGColorGetComponents(color.CGColor);
  10. color = [UIColor colorWithRed:components[]
  11. green:components[]
  12. blue:components[]
  13. alpha:components[]];
  14. }
  15.  
  16. if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
  17. return [NSString stringWithFormat:@"#FFFFFF"];
  18. }
  19.  
  20. return [NSString stringWithFormat:@"#%x%x%x", (int)((CGColorGetComponents(color.CGColor))[]*255.0),
  21. (int)((CGColorGetComponents(color.CGColor))[]*255.0),
  22. (int)((CGColorGetComponents(color.CGColor))[]*255.0)];
  23. }
  24.  
  25. 方法二:完美转化为#ffffff格式,暂未发现问题,推荐使用。
  26.  
  27. // UIColor转#ffffff格式的字符串
  28. + (NSString *)hexStringFromColor:(UIColor *)color {
  29. const CGFloat *components = CGColorGetComponents(color.CGColor);
  30.  
  31. CGFloat r = components[];
  32. CGFloat g = components[];
  33. CGFloat b = components[];
  34.  
  35. return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
  36. lroundf(r * ),
  37. lroundf(g * ),
  38. lroundf(b * )];
  39. }
  40.  
  41. 十六进制字符串转UIColor
  42.  
  43. 方法一:
  44.  
  45. + (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
  46. NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
  47. NSString *fullHex = length == ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
  48. unsigned hexComponent;
  49. [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
  50. return hexComponent / 255.0;
  51. }
  52.  
  53. + (UIColor *) colorWithHexString: (NSString *) hexString {
  54. NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
  55. CGFloat alpha, red, blue, green;
  56. switch ([colorString length]) {
  57. case : // #RGB
  58. alpha = 1.0f;
  59. red = [self colorComponentFrom: colorString start: length: ];
  60. green = [self colorComponentFrom: colorString start: length: ];
  61. blue = [self colorComponentFrom: colorString start: length: ];
  62. break;
  63. case : // #ARGB
  64. alpha = [self colorComponentFrom: colorString start: length: ];
  65. red = [self colorComponentFrom: colorString start: length: ];
  66. green = [self colorComponentFrom: colorString start: length: ];
  67. blue = [self colorComponentFrom: colorString start: length: ];
  68. break;
  69. case : // #RRGGBB
  70. alpha = 1.0f;
  71. red = [self colorComponentFrom: colorString start: length: ];
  72. green = [self colorComponentFrom: colorString start: length: ];
  73. blue = [self colorComponentFrom: colorString start: length: ];
  74. break;
  75. case : // #AARRGGBB
  76. alpha = [self colorComponentFrom: colorString start: length: ];
  77. red = [self colorComponentFrom: colorString start: length: ];
  78. green = [self colorComponentFrom: colorString start: length: ];
  79. blue = [self colorComponentFrom: colorString start: length: ];
  80. break;
  81. default:
  82. return nil;
  83. }
  84. return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
  85. }
  86.  
  87. 方法二:
  88.  
  89. + (UIColor *)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alphaValue {
  90. NSString *cString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
  91. if (cString.length < )
  92. return [UIColor clearColor];
  93. if ([cString hasPrefix:@"0X"])
  94. cString = [cString substringFromIndex:];
  95. if ([cString hasPrefix:@"#"])
  96. cString = [cString substringFromIndex:];
  97. if (cString.length != )
  98. return [UIColor clearColor];
  99. NSRange range;
  100. range.location = ;
  101. range.length = ;
  102. NSString *rString = [cString substringWithRange:range];
  103. range.location = ;
  104. NSString *gString = [cString substringWithRange:range];
  105. range.location = ;
  106. NSString *bString = [cString substringWithRange:range];
  107. unsigned int r, g, b;
  108. [[NSScanner scannerWithString:rString] scanHexInt:&r];
  109. [[NSScanner scannerWithString:gString] scanHexInt:&g];
  110. [[NSScanner scannerWithString:bString] scanHexInt:&b];
  111. // 注意:myColor是自定义宏
  112. //#define myColor(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
  113. return myColor(r, g, b, alphaValue);
  114. }

UIColor与十六进制字符串互转的更多相关文章

  1. python 字节数组和十六进制字符串互转

    . 字节数组 --> 十六进制字符串 >>> a = 'ab' >>> a.encode('hex') ' . 十六进制字符串 --> 字节数组 > ...

  2. IOS 十六进制字符串转换成UIColor

    /** * 十六进制转换成UIColor * * @param stringToConvert 十六进制字符串 * * @return UIColor */ +(UIColor *) hexStrin ...

  3. Golang十六进制字符串和byte数组互转

    Golang十六进制字符串和byte数组互转 需求 Golang十六进制字符串和byte数组互相转换,使用"encoding/hex"包 实现Demo package main i ...

  4. python进制转化函数,10进制字符串互转,16进制字符串互转

    来了老弟,emmmmm,今天想到平时经常用到编码转化,把字符串转化为16进制绕过等等的,今天想着用python写个玩,查询了一些资料,看了些bolg 上面的两个函数是将二进制流转化为16进制,data ...

  5. DataTable 和Json 字符串互转

    #region DataTable 转换为Json字符串实例方法 /// <summary> /// GetClassTypeJosn 的摘要说明 /// </summary> ...

  6. Java中将0x开头的十六进制字符串转换成十进制整数

    1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...

  7. HEX格式数据转换成十六进制字符串

    /** * Hex格式数据转换成十六进制字符串 * @param src */ public void bytesToHexString(byte[] by){ StringBuilder strin ...

  8. ios十进制、十六进制字符串,byte,data等之间的转换

    十进制->十六进制 Byte bytes[]={0xA6,0x27,0x0A}; NSString *strIdL  = [NSStringstringWithFormat:@"%@& ...

  9. 十六进制字符串转化为byte数组

    工作上有这样的需求之前找了好多都不行,好不容易有个可以的赶紧留下来. 原址:http://blog.163.com/roadwalker@126/blog/static/113561841201013 ...

随机推荐

  1. [Python3网络爬虫开发实战] 4.1-使用XPath

    XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索. 所以在做爬虫时,我们完全 ...

  2. jQuery的鼠标移入与移出事件

    mouseover与mouseenter 不论鼠标指针穿过被选元素或其子元素,都会触发 mouseover 事件. 只有在鼠标指针穿过被选元素时,才会触发 mouseenter 事件. mouseou ...

  3. POJ3641 (快速幂) 判断a^p = a (mod p)是否成立

    Description Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a ...

  4. Uva 12657 移动盒子(双向链表)

    题意: 你有一行盒子,从左到右依次编号为1, 2, 3,…, n.可以执行以下4种指令:1 X Y表示把盒子X移动到盒子Y左边(如果X已经在Y的左边则忽略此指令).2 X Y表示把盒子X移动到盒子Y右 ...

  5. 缩小Oracle目录下UNDOTBS01.DBF文件的大小

    缩小Oracle目录下UNDOTBS01.DBF文件的大小 分类: Oracle 使用sys用户登录Oracle 方法一:重置表空间大小 执行ALTER DATABASE DATAFILE 'D:OR ...

  6. Leetcode 214.最短回文串

    最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: &qu ...

  7. React Native学习(十)—— 生命周期

    本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...

  8. FJNUOJ1158(莫比乌斯反演)

    题目:给定n个数字a1...an.有m个询问,格式为L R X Y,意为求aL到aR之间与x的最大公因数为y的个数. 数据组数T<=20 1<=n,m<=1e5 1<=ai&l ...

  9. springboot 关于第三方包 打包问题

    第三方包: 添加library 依赖 在pom.xml中配置 <resources> <resource> <directory>lib</directory ...

  10. Redis Cluster集群搭建后,客户端的连接研究(Spring/Jedis)(待实践)

    说明:无论是否已经搭建好集群,还是使用什么样的客户端去连接,都是必须把全部IP列表集成进去,然后随机往其中一个IP写. 这样做的好处: 1.随机IP写入之后,Redis Cluster代理层会自动根据 ...