iOS学习—UIColor使用16进制颜色

宰父存
2023-12-01

1、实现思路

        先把16进制转换为RGB然后再书写,为了提高开发速度,本文使用UIColor的分类,直接使用16进制颜色,例:self.view.backgroundColor = [UIColor hexColor:@"#333333"];

        首先传入一个string类型的字符串(例:“#333333”),将字符串提取出16进制的部分,两两一组,生成对应的R、G、B三个元素。

2、涉及的方法

NSRange定义如下:

        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];

3、源代码

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

 类似资料: