美工给的颜色基本上都是16进制表示的,系统没有方法可以直接转换成RGB的色值,所以,我写了一个UIColor的分类
思路:将美工给的16进制的颜色转换成2进制,然后分别与红色(0xFF0000)、绿色(0x00FF00)、蓝色(0x0000FF)的二进制进行按位与运算,然后将不需要的位数通过未运算去掉,比如,绿色的后两位不需要,所以向右位置2个16进制位,即8个二进制位,红色同理;
UIColor+Extension.h中:
#import<UIKit/UIKit.h>
@interface UIColor (Extension)
//根据无符号的32位整数转换成对应的
rgb 颜色,
//无符号32位整数的表示方法:0xFF0000 一个0表示4位
4、8、16、32
// hex return UIColor
+ (instancetype)xz_colorWithHex:(u_int32_t)hex;
@end
UIColor+Extension.m
#import"UIColor+Extension.h"
@implementation UIColor (Extension)
+ (instancetype)xz_colorWithHex:(u_int32_t)hex
{
// 0xFFAA99
// 0xFF0000
// =>0xFF0000后面四个0换成2进制就是
0000 0000 0000 0000,所以位移16位
int
red = (hex &0xFF0000) >>16;
// 0xFFAA99 -> 0x1111 1111 AA 1001 1001
// 0x00FF00 ->
//与之后的结果:=>
0x00AA00后面两个0不需要,所以位移8位后是
0x0000AA,前面全是0,忽略即可
int
green = (hex &0x00FF00) >>8;
//后两位是蓝色
// 0xFFAA99 -> 0x1111 1111 AA 1001 1001
// 0x0000FF -> 0x0000 0000 00 1111 1111
//按位与
0与1是0
1与1是1原来是几还是几
int
blue = hex &0x0000FF;
return
[UIColorcolorWithRed:red
/255.0green:green
/255.0blue:blue
/255.0alpha:1.0];
}
@end
注意:分类的方法前面加一个前缀,为了避免与系统的方法冲突