十六进制色值转换

本文介绍了一种将十六进制颜色字符串转换为UIColor对象的方法。该方法支持多种格式的输入,包括短格式(如“#fff”)、长格式(如“#ffffff”)以及包含透明度的格式(如“#ffffffff”)。通过解析十六进制字符串并提取红、绿、蓝和Alpha通道的值来创建对应的UIColor。
摘要由CSDN通过智能技术生成

+ (UIColor *)colorWithHexString:(id)hexString

{

    if (![hexString isKindOfClass:[NSString class]] || [hexString length] == 0) {

        return [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0f];

    }

    

    const char *s = [hexString cStringUsingEncoding:NSASCIIStringEncoding];

    if (*s == '#') {

        ++s;

    }

    unsigned long long value = strtoll(s, nil, 16);

    int r, g, b, a;

    switch (strlen(s)) {

        case 2:

            // xx

            r = g = b = value;

            a = 255;

            break;

        case 3:

            // RGB

            r = ((value & 0xf00) >> 8);

            g = ((value & 0x0f0) >> 4);

            b = ((value & 0x00f) >> 0);

            r = r * 16 + r;

            g = g * 16 + g;

            b = b * 16 + b;

            a = 255;

            break;

        case 6:

            // RRGGBB

            r = (value & 0xff0000) >> 16;

            g = (value & 0x00ff00) >>  8;

            b = (value & 0x0000ff) >>  0;

            a = 255;

            break;

        default:

            // RRGGBBAA

            r = (value & 0xff000000) >> 24;

            g = (value & 0x00ff0000) >> 16;

            b = (value & 0x0000ff00) >>  8;

            a = (value & 0x000000ff) >>  0;

            break;

    }

    return [UIColor colorWithRed:r/255.0f green:g/255.0f blue:b/255.0f alpha:a/255.0f];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值