1. 颜色有3种颜色通道,分别是:R G B
    其中,R是Red(红色),G是Green(绿色),B是Blue(蓝色)。
  2. 颜色有两种表达方式,分别是24位表达方式和32位表达方式。
  • 24位表达方式指的是 R, G, B
  • 32位表达方式指的是 R, G, B, alpha
  • 最常见的是24位的表达方式,虽然32位可以展示更多更丰富的颜色,但是我们一般都用不到。
  1. 颜色的两种写法:10进制写法和16进制写法
  • 10进制写法:例如 111,222,201 => R : 111, G : 222 ,B : 201
    每一个颜色通道是8位,0 ~ 255
    iOS中2个方法,分别是 - colorWithRed:green:blue: 和 - colorWithRed:green:blue:alpha: ,对号入座,Red就是 111/255.0 ,Green就是 222/255.0 ,Blue就是201/255.0 ,一般美工不给alpha的值,默认使用第一个方法;如果给了alpha,使用第二个方法即可。这两个方法的参数的取值范围都是 0~1 。
  • 16进制写法:就是数字加上一些字母,比如:#4499E0 或者 0x4499E0
    其中,#是美工常用的写法,表示16进制;而0x是oc的常用写法,也是表示16进制。
    16进制和10进制的分割方法一样,R:44,G:99,B:E0
    16进制的使用方法,实际上就是将16进制转换成10进制(转换方法自行百度),再使用上述的两个方法即可。但是我们一般不这样做,而是自定义一个分类,直接输入16进制值来使用。

16进制获取颜色的分类代码(别人家的)

// UIColor+Hex.h
#import <UIKit/UIKit.h>

@interface UIColor (Hex)

// 默认alpha位1
+ (UIColor *)colorWithHexString:(NSString *)color;

//从十六进制字符串获取颜色,
//color:支持@“#123456”、 @“0X123456”、 @“123456”三种格式
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha;

@end


// UIColor+Hex.m
#import "UIColor+Hex.h"

@implementation UIColor (Hex)

+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha
{
    //删除字符串中的空格
    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    // String should be 6 or 8 characters
    if ([cString length] < 6)
    {
        return [UIColor clearColor];
    }
    // strip 0X if it appears
    //如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾
    if ([cString hasPrefix:@"0X"])
    {
        cString = [cString substringFromIndex:2];
    }
    //如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾
    if ([cString hasPrefix:@"#"])
    {
        cString = [cString substringFromIndex:1];
    }
    if ([cString length] != 6)
    {
        return [UIColor clearColor];
    }

    // Separate into r, g, b substrings
    NSRange range;
    range.location = 0;
    range.length = 2;
    //r
    NSString *rString = [cString substringWithRange:range];
    //g
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    //b
    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    // Scan values
    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];
    return [UIColor colorWithRed:((float)r / 255.0f) green:((float)g / 255.0f) blue:((float)b / 255.0f) alpha:alpha];
}

//默认alpha值为1
+ (UIColor *)colorWithHexString:(NSString *)color
{
    return [self colorWithHexString:color alpha:1.0f];
}

@end

抽取宏

使用原生的方法是在太过麻烦,而我们又非常频繁的使用获取颜色的方法,我们可以把其抽成宏来使用。我们将常用宏放在一个公用类(Public,Content什么的)中,再把这个公用类引用在PCH文件里,这样,我们就可以直接在其他类文件里使用这些常用宏了。

// 16进制
#define RGBAColor(r,g,b,a) [UIColor colorWithRed:(r) / 256.0 green:(g) / 256.0 blue:(b) / 256.0 alpha:(a)]

#define RGBColor RGBA(r,g,b,1)

// 32进制
#define HexRGBAColor(hex,a) [UIColor colorWithHexString:hex alpha:a]

#define HexRGBColor(hex) HexRGBAColor(hex,1)