项目中碰到一个问题,实时设置灯光的颜色。
通过蓝牙把协议命令发给设备,命令后面带上软件界面当前选择的颜色的十六进制。
获取当前颜色用的是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];
}