美工给的颜色基本上都是
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
[
UIColor
colorWithRed
:red /
255.0
green
:green /
255.0
blue
:blue /
255.0
alpha
:
1.0
];
}
@end
注意:分类的方法前面加一个前缀,为了避免与系统的方法冲突