iOS 颜色宏

平常用的颜色宏大概如下

#define RGBHex(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

考虑到蓝湖中获得的十六进制颜色值为#FF0000,cv时需要先删除#再添加0x,想省略这部分

C语言宏中'#'称之为字符串化操作符(Stringizing Operator),它将函数宏的实际参数转换为对应的字符串常量。利用这个特点定义如下的颜色宏

#define HEXA(COLOR,A) ({ \
    char *color = #COLOR;\
    NSString *colorString = [NSString stringWithUTF8String:color]; \
    colorString = [colorString stringByReplacingOccurrencesOfString:@"#" withString:@""]; \
    colorString = [colorString stringByReplacingOccurrencesOfString:@"0x" withString:@""]; \
    unsigned int red,green,blue; \
    NSRange range; \
    range.length = 2; \
    range.location = 0; \
    [[NSScanner scannerWithString:[colorString substringWithRange:range]] scanHexInt:&red]; \
    range.location = 2; \
    [[NSScanner scannerWithString:[colorString substringWithRange:range]] scanHexInt:&green]; \
    range.location = 4; \
    [[NSScanner scannerWithString:[colorString substringWithRange:range]] scanHexInt:&blue]; \
    [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:A]; \
})

#define HEX(COLOR) HEXA(COLOR,1.0)

支持0xFF0000/#FF0000/FF0000这三种格式