美文网首页
IOS:UIColor_使用十六进制数字或字符串实现自定义的颜色

IOS:UIColor_使用十六进制数字或字符串实现自定义的颜色

作者: 遇见0620 | 来源:发表于2017-10-20 17:52 被阅读1043次

    引言

    UIColor为我们提供了很多系统定义的颜色,比如:[UIColor redColor]、[UIColor blueColor] ......这样; 但是在项目中我们经常需要根据用户需求使用一些自定义的颜色,UI在给出这些颜色的时候大致分为以下几种类型:

    1. (R, G, B)= (255, 106, 80);
    2. 0xff6a50这样的十六进制数字。
    3. “#ff6a50”这样的字符串。(有的人也可能将0xff6a50作为字符串来使用)

    本文会对以上三种形式的值怎样实现自定义颜色进行详细说明。

    一、解决方法

    1. 针对引言中1、2 这样的形式,由于他们传递的值都是数值,所以有两种解决办法:
      a. 通过定义宏来实现,这样的优点是代码量较少。
      b. 通过调用方法+ (UIColor*)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha; 但是需要注意的一点是对于0xff6a50这样的十六进制数 字 我们需要进行处理,将它转化为RGB的值再调用该方法。
    2. 针对引言中3 ”0xff6a50“ 或者 ”#ff6a50“ 这样的字符串形式,本文主要通过代码来转换字符串为合理的RGB值,之后才能实现自定义颜色。

    首先看一下还没有改变button背景色为自定义颜色前的初始界面,点击button,button的背景色变为0xff6a50这样的自定义颜色。

    1.初始界面

    接下来介绍具体实现方式。

    二、具体实现方式

    1. 通过定义宏来实现自定义颜色(对应上文解决方法中的1.a)
      核心代码:
    #define RGBACOLOR(R, G, B, A) [UIColor colorWithRed:((R) / 255.0f) green:((G) / 255.0f) blue:((B) / 255.0f) alpha:A]
    #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
    

    点击界面中的第一部分的button1调用定义好的宏的方式:

    - (IBAction)macroChangeCustomColor:(id)sender {
        UIButton *button = (UIButton *)sender;
        //button.backgroundColor = RGBACOLOR(255, 106, 80, 1);
        button.backgroundColor = UIColorFromRGB(0xff6a50);
    }
    
    1. 通过代码来实现自定义颜色(对应上文解决方法中的1.b)
      代码实现:
    - (IBAction)colorWithHex:(id)sender {
        UIButton *button = (UIButton *)sender;
        button.backgroundColor = [self colorWithHex:0xff6a50 alpha:1.0];
    }
    
    - (UIColor *)colorWithHex:(NSInteger)hex alpha:(CGFloat)alpha {
        return [UIColor colorWithRed:((float)((hex & 0xFF0000) >> 16))/255.0 green:((float)((hex & 0xFF00) >> 8))/255.0 blue:((float)(hex & 0xFF))/255.0 alpha:alpha];
    }
    
    1. 通过代码将”0xff6a50“ 或者 ”#ff6a50“ 这样的字符串形式值,实现为自定义的颜色。(对应上文解决方法中的2)
      代码实现:
    - (IBAction)colorWithHexString:(id)sender {
        UIButton *button = (UIButton *)sender;
        //button.backgroundColor = [self colorWithHexString:@"0xff6a50" alpha:1.0];
        button.backgroundColor = [self colorWithHexString:@"#ff6a50" alpha:1.0];
    }
    
    - (UIColor *)colorWithHexString:(NSString *)hexString alpha:(CGFloat)alpha {
        hexString = [hexString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        hexString = [hexString stringByReplacingOccurrencesOfString:@"#" withString:@""];
        hexString = [hexString stringByReplacingOccurrencesOfString:@"0x" withString:@""];
        NSRegularExpression *RegEx = [NSRegularExpression regularExpressionWithPattern:@"^[a-fA-F|0-9]{6}$" options:0 error:nil];
        NSUInteger match = [RegEx numberOfMatchesInString:hexString options:NSMatchingReportCompletion range:NSMakeRange(0, hexString.length)];
    
        if (match == 0) {return [UIColor clearColor];}
    
        NSString *rString = [hexString substringWithRange:NSMakeRange(0, 2)];
        NSString *gString = [hexString substringWithRange:NSMakeRange(2, 2)];
        NSString *bString = [hexString substringWithRange:NSMakeRange(4, 2)];
        unsigned int r, g, b;
        BOOL rValue = [[NSScanner scannerWithString:rString] scanHexInt:&r];
        BOOL gValue = [[NSScanner scannerWithString:gString] scanHexInt:&g];
        BOOL bValue = [[NSScanner scannerWithString:bString] scanHexInt:&b];
        
        if (rValue && gValue && bValue) {
            return [UIColor colorWithRed:((float)r/255.0f) green:((float)g/255.0f) blue:((float)b/255.0f) alpha:alpha];
        } else {
            return [UIColor clearColor];
        }
    }
    

    通过这三种方式基本上可以搞定自定义颜色的实现了!最后看点击三个按钮后的效果图。

    三、效果图

    2. 效果图
    关注我的微信公众号:“豆沙包小姐”!一个喜欢阅读,喜欢写字的女孩子,希望我的文字你能喜欢!谢谢你那么好看还能看我的文章到末尾处,祝陌生的你一切都好!

    相关文章

      网友评论

          本文标题:IOS:UIColor_使用十六进制数字或字符串实现自定义的颜色

          本文链接:https://www.haomeiwen.com/subject/lcwvuxtx.html