作者:钟颖Cyan
链接:https://www.zhihu.com/question/33503266/answer/56656774
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在不使用HSB颜色的情况下其实没有区别,这两个都是用的RGB颜色。
Hex只是一种进制,十六进制。
iOS 提供的默认构造颜色(特指RGB)的方法其实是用RGBA的每个0~1的分数来构造的,比如:
[UIColorcolorWithRed:0.2green:0.2blue:0.2alpha:1.0];
表示Red 20% Green 20% Blue 20% Alpha 100%
但其实真实情况是我们使用的是256色,所以这个颜色其实是
Red 51, Green 51, Blue 51, Alpha 1
所以我们一般会有一个方法,可以用三个0~255十进制数来生成一个颜色:
[UIColorcolorWithRed:51/255.0green:51/255.0blue:51/255.0alpha:1];
但是如果设计师给的是16进制的颜色,比如#354b60
工程师有两种办法,第一种还是使用上面那个方法,不过填进去的时候他会这么填:
[UIColorcolorWithRed:0x35/255.0green:0x4b/255.0blue:0x60/255.0alpha:1];
即把每一位拆开,以16进制数填进去
另外他会写一个方便用16进制数来构造颜色的方法,比如:
+(UIColor*)colorWithRGB:(int)rgb{return[UIColorcolorWithRed:((rgb&0xFF0000)>>16)/255.0fgreen:((rgb&0xFF00)>>8)/255.0fblue:((rgb&0xFF))/255.0falpha:1.0f];}
这样的话可以把十六进制数0x354b60填进去也能生成同样的一个颜色。
上面提到的只是一个原理,现实中我们可能会使用一些工具类/扩展或者宏定义之类的来简化这个事情。