IOS:UIColor对象srgb值转换为16进制

项目中碰到一个问题,实时设置灯光的颜色。

通过蓝牙把协议命令发给设备,命令后面带上软件界面当前选择的颜色的十六进制。

获取当前颜色用的是WSColorModeViewController框架,

回调的对象是UIColor类型,看了看框架代码,感觉还是改使用对象的地方,把color对象转为16进制

这个方法可以把color对象,本质上是把颜色的srgb值转为16进制

如果有需要,可以在最后的return的字符串加0x或者其他符号,看个人需求

       

-(NSString *)hexadecimalFromUIColor: (UIColor*) color {

 

      if(CGColorGetNumberOfComponents(color.CGColor) < 4) {

 

      const CGFloat *components =CGColorGetComponents(color.CGColor);

 

      color = [UIColor colorWithRed:components[0]

 

      green:components[0]

 

     blue:components[0]

 

     alpha:components[1]];

 

}

 

      if(CGColorSpaceGetModel(CGColorGetColorSpace(color.CGColor)) !=kCGColorSpaceModelRGB) {

 

      return [NSString stringWithFormat:@"#FFFFFF"];

 

}

 

      NSString *r,*g,*b;

 

      (int)((CGColorGetComponents(color.CGColor))[0]*255.0) == 0?(r =[NSString stringWithFormat:@"0%x",(int)     ((CGColorGetComponents(color.CGColor))[0]*255.0)]):(r= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[0]*255.0)]);

 

(int)((CGColorGetComponents(color.CGColor))[1]*255.0)== 0?(g = [NSString stringWithFormat:@"0%x",(int)((CGColorGetComponents(color.CGColor))[1]*255.0)]):(g= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[1]*255.0)]);

 

(int)((CGColorGetComponents(color.CGColor))[2]*255.0)== 0?(b = [NSString stringWithFormat:@"0%x",(int)((CGColorGetComponents(color.CGColor))[2]*255.0)]):(b= [NSString stringWithFormat:@"%x",(int)((CGColorGetComponents(color.CGColor))[2]*255.0)]);

 

return [NSString stringWithFormat:@"%@%@%@",r,g,b];

 

}

 

 

 

IOS:UIColor对象srgb值转换为16进制

上一篇:14 款(移动端)UI 框架


下一篇:axios请求失败,获取接口返回错误信息