iOS-蓝湖Hex十六进制取色值封装

前言

  • 在我们取蓝湖色值时总是被颜色的取值耽误时间,可不可以直接取蓝湖上的Hex的值,进行操作即可
    在这里插入图片描述

上代码

只有一个UIColor的颜色分类 - UIColor+ColorHex

  • UIColor+ColorHex.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface UIColor(ColorHex)

+ (UIColor *)ly_colorWithHexString:(NSString *)hexString;
+ (UIColor *)ly_colorWithHexString:(NSString *)hexString withAlpha:(float)alp;

@end
  • UIColor+ColorHex.m
#import "UIColor+ColorHex.h"

@implementation UIColor(ColorHex)

#pragma mark - 颜色值十六进制 转换  #ffffff -> uicolor

+ (UIColor *)ly_colorWithHexString:(NSString *)hexString {
    NSString *colorString = [[hexString stringByReplacingOccurrencesOfString:@"#" withString:@""] uppercaseString];
    CGFloat alpha, red, blue, green;
    switch ([colorString length]) {
        case 3: // #RGB
            alpha = 1.0f;
            red   = [self ly_colorComponentFrom:colorString start:0 length:1];
            green = [self ly_colorComponentFrom:colorString start:1 length:1];
            blue  = [self ly_colorComponentFrom:colorString start:2 length:1];
            break;
        case 4: // #ARGB
            alpha = [self ly_colorComponentFrom:colorString start:0 length:1];
            red   = [self ly_colorComponentFrom:colorString start:1 length:1];
            green = [self ly_colorComponentFrom:colorString start:2 length:1];
            blue  = [self ly_colorComponentFrom:colorString start:3 length:1];
            break;
        case 6: // #RRGGBB
            alpha = 1.0f;
            red   = [self ly_colorComponentFrom:colorString start:0 length:2];
            green = [self ly_colorComponentFrom:colorString start:2 length:2];
            blue  = [self ly_colorComponentFrom:colorString start:4 length:2];
            break;
        case 8: // #AARRGGBB
            alpha = [self ly_colorComponentFrom:colorString start:0 length:2];
            red   = [self ly_colorComponentFrom:colorString start:2 length:2];
            green = [self ly_colorComponentFrom:colorString start:4 length:2];
            blue  = [self ly_colorComponentFrom:colorString start:6 length:2];
            break;
        default:
            NSLog(@"色值有问题,被改为默认白色了,具体代码全局搜索这条log输出文字");
            return [UIColor whiteColor];
            //[NSException raise:@"Invalid color value" format: @"Color value %@ is invalid.  It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString];
            break;
    }
    return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
}

+ (UIColor *)ly_colorWithHexString:(NSString *)hexString withAlpha:(float)alp {
    NSString *colorString = [[hexString stringByReplacingOccurrencesOfString:@"#" withString:@""] uppercaseString];
    CGFloat alpha, red, blue, green;
    switch ([colorString length]) {
        case 3: // #RGB
            alpha = alp;
            red   = [self ly_colorComponentFrom:colorString start:0 length:1];
            green = [self ly_colorComponentFrom:colorString start:1 length:1];
            blue  = [self ly_colorComponentFrom:colorString start:2 length:1];
            break;
        case 4: // #ARGB
            alpha = [self ly_colorComponentFrom:colorString start:0 length:1];
            red   = [self ly_colorComponentFrom:colorString start:1 length:1];
            green = [self ly_colorComponentFrom:colorString start:2 length:1];
            blue  = [self ly_colorComponentFrom:colorString start:3 length:1];
            break;
        case 6: // #RRGGBB
            alpha = alp;
            red   = [self ly_colorComponentFrom:colorString start:0 length:2];
            green = [self ly_colorComponentFrom:colorString start:2 length:2];
            blue  = [self ly_colorComponentFrom:colorString start:4 length:2];
            break;
        case 8: // #AARRGGBB
            alpha = [self ly_colorComponentFrom:colorString start:0 length:2];
            red   = [self ly_colorComponentFrom:colorString start:2 length:2];
            green = [self ly_colorComponentFrom:colorString start:4 length:2];
            blue  = [self ly_colorComponentFrom:colorString start:6 length:2];
            break;
        default:
            NSLog(@"色值有问题,被改为默认白色了,具体代码全局搜索这条log输出文字");
            return [UIColor whiteColor];
            //[NSException raise:@"Invalid color value" format: @"Color value %@ is invalid.  It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB", hexString];
            break;
    }
    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

+ (CGFloat)ly_colorComponentFrom:(NSString *)string start:(NSUInteger)start length:(NSUInteger)length {
    NSString *substring = [string substringWithRange: NSMakeRange(start, length)];
    NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @"%@%@", substring, substring];
    unsigned hexComponent;
    [[NSScanner scannerWithString:fullHex] scanHexInt:&hexComponent];
    return hexComponent / 255.0;
}

@end

宏的封装 - 点睛之笔

  • ViewController.m 中引入头文件 UIColor+ColorHex.h
#import "UIColor+ColorHex.h"
  • 定义宏
    • CFSTR() :C语言的接口,直接将 #333333 十六进制,转换为字符串函数
    • (__bridge NSString *) : 强转成OC对象
//直接取值
#define LY_Color_Hex(hex) [UIColor ly_colorWithHexString:((__bridge NSString *)CFSTR(#hex))]
//直接取值 + 透明度
#define LY_Color_HexAlpha(hex,alp) [UIColor ly_colorWithHexString:((__bridge NSString *)CFSTR(#hex)) withAlpha:alp]

使用

  • LY_Color_Hex(#333333)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值