IOS:UIColor对象rgb值转换为16进制
项目中碰到一个问题,实时设置灯光的颜色。
通过蓝牙把协议命令发给设备,命令后面带上软件界面当前选择的颜色的十六进制。
获取当前颜色用的是WSColorModeViewController框架,
回调的对象是UIColor类型,看了看框架代码,感觉还是改使用对象的地方,把color对象转为16进制
下面这个方法可以把color对象,本质上是把颜色的rgb值转为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]; }
================9.9分割线=========
上面这个方法多少是有点问题的,调亮度的时候在亮度最低的时候,发现整个颜色都不对了
看了下打印的日志,发现出现了少位的问题,正常的应该6位,但是打印日志只有5位
于是网上找了找,发现了下面的这个方法。这个方法测了下,没有出现颜色转换出问题的情况
1 //把颜色转为16进制的代码 2 -(NSString *)hexadecimalFromUIColor: (UIColor*) color { 3 const CGFloat *components = CGColorGetComponents(color.CGColor); 4 5 CGFloat r = components[0]; 6 CGFloat g = components[1]; 7 CGFloat b = components[2]; 8 9 return [NSString stringWithFormat:@"%02lX%02lX%02lX", 10 lroundf(r * 255), 11 lroundf(g * 255), 12 lroundf(b * 255)]; 13 }
分类:
IOS开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端