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为开始的indexlength表示对象长度。他们都是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:&amp;r];
    [[NSScanner scannerWithString:gString] scanHexInt:&amp;g];
    [[NSScanner scannerWithString:bString] scanHexInt:&amp;b];
    
    return [UIColor colorWithRed:(float)r / 255.0 green:(float)g / 255.0 blue:(float)b /255.0 alpha:alpha];
}

@end

代码中使用了pch文件使用教程点击

具体代码如下HexString

原文地址:https://blog.csdn.net/qq_43441647/article/details/127194252

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_24690.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注