- 颜色有3种颜色通道,分别是:R G B
其中,R是Red(红色),G是Green(绿色),B是Blue(蓝色)。- 颜色有两种表达方式,分别是24位表达方式和32位表达方式。
- 24位表达方式指的是 R, G, B
- 32位表达方式指的是 R, G, B, alpha
- 最常见的是24位的表达方式,虽然32位可以展示更多更丰富的颜色,但是我们一般都用不到。
- 颜色的两种写法: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)