版权声明:原创文章,未经博主允许禁止转载。欢迎点击头像上方“郭晓东的专栏”查看专栏 https://blog.csdn.net/hherima/article/details/83374809
今天处理一个十六进制色值和alpha的问题,忽然想到。事物分段处理,逻辑容易的多。这也让我想起了快速排序
现在有一个字符串@"#ffffff,0.2"或者@"#ffffff"这种无alpha默认是1.0,程序要将其解析成一个色值和alpha值。
老的处理,OC代码片段
+ (UIColor *)colorWithHexAlphaString:(NSString *)hexString {
CGFloat alpha = 1.0;
if(hexString.length > 7){
NSRange commaRan = [hexString rangeOfString:@","];
NSUInteger commaLen = [@"," length];
if (commaRan.location != NSNotFound) {
NSUInteger alphaLen = MAX(hexString.length - commaRan.location - 1,0);
alpha = [[hexString substringWithRange:NSMakeRange(commaRan.location + commaLen, alphaLen)] floatValue];
}
}
//hex的解析略
//if ([hexString length] < 6) {
// return nil;
//}else{
// hexString = [hexString substringWithRange:(NSMakeRange(0, 6))];
//}
//NSScanner *scanner = [[NSScanner alloc] initWithString:hexString];
//unsigned hexValue = 0;
//if ([scanner scanHexInt:&hexValue] && [scanner isAtEnd]) {
// int r = ((hexValue & 0xFF0000) >> 16);
// int g = ((hexValue & 0x00FF00) >> 8);
// int b = ( hexValue & 0x0000FF) ;
// return [self colorWithRed:((float)r / 255)
// green:((float)g / 255)
// blue:((float)b / 255)
// alpha:alpha];
//}
}
新的处理,使用NSString的 componentsSeparatedByString,再逐个解析,oc代码片段
+ (UIColor *)colorWithHexAlphaString:(NSString *)hexString {
CGFloat alpha = 1.0;
if(hexString.length > 7){
NSArray* split = [hexString componentsSeparatedByString:@","];
if ([split.lastObject length]) {
alpha = [split.lastObject floatValue];
}
}
//hex的解析略
//if ([hexString length] < 6) {
// return nil;
//}else{
// hexString = [hexString substringWithRange:(NSMakeRange(0, 6))];
//}
//
//NSScanner *scanner = [[NSScanner alloc] initWithString:hexString];
//unsigned hexValue = 0;
//if ([scanner scanHexInt:&hexValue] && [scanner isAtEnd]) {
// int r = ((hexValue & 0xFF0000) >> 16);
// int g = ((hexValue & 0x00FF00) >> 8);
// int b = ( hexValue & 0x0000FF) ;
// return [self colorWithRed:((float)r / 255)
// green:((float)g / 255)
// blue:((float)b / 255)
// alpha:alpha];
//}
}