UIColor转十六进制字符串

方法一:经过测试发现部分颜色会转化为#fffff(五个f),转化残缺导致最后颜色无法还原,不推荐使用。

// UIColor转#ffffff格式的字符串
+ (NSString *)hexFromUIColor:(UIColor *)color
{
if (CGColorGetNumberOfComponents(color.CGColor) < ) {
const CGFloat *components = CGColorGetComponents(color.CGColor);
color = [UIColor colorWithRed:components[]
green:components[]
blue:components[]
alpha:components[]];
} if (CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) != kCGColorSpaceModelRGB) {
return [NSString stringWithFormat:@"#FFFFFF"];
} return [NSString stringWithFormat:@"#%x%x%x", (int)((CGColorGetComponents(color.CGColor))[]*255.0),
(int)((CGColorGetComponents(color.CGColor))[]*255.0),
(int)((CGColorGetComponents(color.CGColor))[]*255.0)];
} 方法二:完美转化为#ffffff格式,暂未发现问题,推荐使用。 // UIColor转#ffffff格式的字符串
+ (NSString *)hexStringFromColor:(UIColor *)color {
const CGFloat *components = CGColorGetComponents(color.CGColor); CGFloat r = components[];
CGFloat g = components[];
CGFloat b = components[]; return [NSString stringWithFormat:@"#%02lX%02lX%02lX",
lroundf(r * ),
lroundf(g * ),
lroundf(b * )];
} 十六进制字符串转UIColor 方法一: + (CGFloat) colorComponentFrom: (NSString *) string start: (NSUInteger) start length: (NSUInteger) length {
NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
NSString *fullHex = length == ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
unsigned hexComponent;
[[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
return hexComponent / 255.0;
} + (UIColor *) colorWithHexString: (NSString *) hexString {
NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @"#" withString: @""] uppercaseString];
CGFloat alpha, red, blue, green;
switch ([colorString length]) {
case : // #RGB
alpha = 1.0f;
red = [self colorComponentFrom: colorString start: length: ];
green = [self colorComponentFrom: colorString start: length: ];
blue = [self colorComponentFrom: colorString start: length: ];
break;
case : // #ARGB
alpha = [self colorComponentFrom: colorString start: length: ];
red = [self colorComponentFrom: colorString start: length: ];
green = [self colorComponentFrom: colorString start: length: ];
blue = [self colorComponentFrom: colorString start: length: ];
break;
case : // #RRGGBB
alpha = 1.0f;
red = [self colorComponentFrom: colorString start: length: ];
green = [self colorComponentFrom: colorString start: length: ];
blue = [self colorComponentFrom: colorString start: length: ];
break;
case : // #AARRGGBB
alpha = [self colorComponentFrom: colorString start: length: ];
red = [self colorComponentFrom: colorString start: length: ];
green = [self colorComponentFrom: colorString start: length: ];
blue = [self colorComponentFrom: colorString start: length: ];
break;
default:
return nil;
}
return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
} 方法二: + (UIColor *)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alphaValue {
NSString *cString = [[hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
if (cString.length < )
return [UIColor clearColor];
if ([cString hasPrefix:@"0X"])
cString = [cString substringFromIndex:];
if ([cString hasPrefix:@"#"])
cString = [cString substringFromIndex:];
if (cString.length != )
return [UIColor clearColor];
NSRange range;
range.location = ;
range.length = ;
NSString *rString = [cString substringWithRange:range];
range.location = ;
NSString *gString = [cString substringWithRange:range];
range.location = ;
NSString *bString = [cString substringWithRange:range];
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
// 注意:myColor是自定义宏
//#define myColor(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A]
return myColor(r, g, b, alphaValue);
}

最新文章

  1. Visual Studio Emulator for Android 的安装与使用 感觉最干净好看的模拟器.
  2. Oracle 11g XE release2安装与指导
  3. Flask-WTF form doesn&#39;t have attribute &#39;validate_on_submit&#39;问题
  4. 【Web前端】---js调用本地应用程序
  5. jQuery中append()与appendTo()方法区别
  6. hadoop 中对Vlong 和 Vint的压缩方法
  7. Developers, do consider different user roles! - A bad experience with cron
  8. pcDuino 刷系统-LiveSuit
  9. WPF笔记(2.3 StackPanel)——Layout
  10. for循环遍历字符串的还有一种方法
  11. HTML DOCTYPE文档类型举例说明
  12. .net到Java那些事儿--structs做了那些事(二)
  13. JSON、数组、时间戳
  14. SSE图像算法优化系列十六:经典USM锐化中的分支判断语句SSE实现的几种方法尝试。
  15. 转载 git Unknown SSL protocol error in connection to github.com:443
  16. Java异常处理-----自行处理
  17. haproxy(8):haproxy代理MySQL要考虑的问题
  18. [Erlang02] 那些经历过的Erlang小坑1-10
  19. VS中快捷键修改以及快捷键的查看
  20. java:Filter、Listener 自定义拦截器和过滤器应用

热门文章

  1. 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 &amp; 计算整数的7倍
  2. [Python3网络爬虫开发实战] 7-动态渲染页面爬取
  3. wepy.request 请求成功但是不进入success和fail方法,及请求传参问题
  4. buf.slice()
  5. python面向对象编程实例
  6. 《ajax学习》之ajax+JavaScript事件验证用户名是否可注册
  7. [网络流24题] 方格取数问题(cogs 734)
  8. Codeforces915F. Imbalance Value of a Tree
  9. Linux下汇编语言学习笔记4 ---
  10. Codeforces Round #482 (Div. 2) C Kuro and Walking Route