先把16进制转换为RGB然后再书写,为了提高开发速度,本文使用UIColor的分类,直接使用16进制颜色,例:self.view.backgroundColor = [UIColor hexColor:@"#333333"];
首先传入一个string类型的字符串(例:“#333333”),将字符串提取出16进制的部分,两两一组,生成对应的R、G、B三个元素。
typedef struct _NSRange
{
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。代码中使用到了NSRange分割字符串。
NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
NSRange有2个成员:
NSUInteger location : 表示该范围的起始位置
NSUInteger length : 表示该范围内的长度
// 从六位数值中找到RGB对应的位数并转换
NSRange range;
range.location = 0;
range.length = 2;
//R G B
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values,unsigned int表示无符号的整数,int可以为负数
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
UIColor+ZWHexColor.h
@interface UIColor (ZWHexColor)
+ (UIColor *)hexColor:(NSString *)color;
+ (UIColor *)hexColor:(NSString *)color alpha:(CGFloat)alpha;
@end
UIColor+ZWHexColor.m
#import "UIColor+ZWHexColor.h"
@implementation UIColor (ZWHexColor)
+ (UIColor *)hexColor:(NSString *)color {
return [UIColor hexColor:color alpha:1];
}
+ (UIColor *)hexColor:(NSString *)color alpha:(CGFloat)alpha {
/*
删除字符串中的空格
stringByTrimmingCharactersInSet作用:去掉特殊字符
whitespaceCharacterSet 去掉收尾的空格(注:只能去掉收尾的空格)
*/
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if (cString.length < 6) {
return [UIColor clearColor];
}
/*判断前缀*/
//如果是0x开头的,那么截取字符串,字符串从索引为2的位置开始,一直到末尾
if ([cString hasPrefix:@"0x"] || [cString hasPrefix:@"0X"]) {
cString = [cString substringFromIndex:2];
}
//如果是#开头的,那么截取字符串,字符串从索引为1的位置开始,一直到末尾
if ([cString hasPrefix:@"#"]) {
cString = [cString substringFromIndex:1];
}
if (cString.length != 6) {
return [UIColor clearColor];
}
// 从六位数值中找到RGB对应的位数并转换
NSRange range;
range.location = 0;
range.length = 2;
//R G B
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values,unsigned int表示无符号的整数,int可以为负数
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.0 green:(float)g / 255.0 blue:(float)b /255.0 alpha:alpha];
}
@end
代码中使用了pch文件,使用教程请点击。
具体代码如下HexString。