XZ_iOS之UIColor的RGB数值转换方法

来源:互联网 发布:坎昆离墨西哥城源码 编辑:程序博客网 时间:2024/05/21 12:44
美工给的颜色基本上都是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 481632
// 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
   //按位与 010 111原来是几还是几
   int blue = hex &0x0000FF;
   
   return [UIColorcolorWithRed:red /255.0green:green /255.0blue:blue /255.0alpha:1.0];
}

@end


注意:分类的方法前面加一个前缀,为了避免与系统的方法冲突
原创粉丝点击