美文网首页iOS高质量博客程序员田宝的文章健身房
iOS 常用RGB十六进制颜色设置的宏定义、方法

iOS 常用RGB十六进制颜色设置的宏定义、方法

作者: 楚简约 | 来源:发表于2017-07-28 22:59 被阅读800次

    前言

    hexadecimal code(十六进制编码),简写为 hex code。Hexadecimals (或 hex)是十六进制数字,这意味着它使用十六个不同的符号。

    在 CSS 中,我们可以使用 6 位十六进制数字来表示颜色,每 2 位分别表示红色 (R)、绿色 (G) 和蓝色 (B) 成分。例如,#000000 是黑色,同时也是可能的数值中最小的。#FF0000是红色, #00FF00是绿色, #0000FF是蓝色。

    你可能会疑惑为什么我们使用6位数来表示一种颜色而不是只用一位或二位,答案是使用6位数可提供给我们巨大数量的颜色变化。

    会有多少种可能的颜色?16 个值和 6 个位置意味着我们有 16 的 6 次方,或者说超过 1600 万种可能的颜色。

    在实际开发当中,我们会遇到各种设置颜色的场景。有通过RGB三原色设置的、有通过服务器返回十六进制字符串设置的、有设置颜色同时还设置透明度的、有本地使用十六进制设置的,本文将iOS中常用RGB十六进制颜色设置的宏定义及相关分类方法做了一个总结。

    正文

    一、设置颜色相关宏定义

    RGB

    #define ssRGB(r, g, b)             [UIColor colorWithRed:((r) / 255.0) green:((g) / 255.0) blue:((b) / 255.0) alpha:1.0]
    #define ssRGBAlpha(r, g, b, a)     [UIColor colorWithRed:((r) / 255.0) green:((g) / 255.0) blue:((b) / 255.0) alpha:(a)]
    

    十六进制颜色 Hex

    #define ssRGBHex(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]
    #define ssRGBHexAlpha(rgbValue,a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:(a)]
    

    颜色设置宏定义的使用 :

    //RGB
    _view.backgroundColor = ssRGB(246, 245, 246);
    _view.backgroundColor = ssRGB(246, 245, 246, 0.8);
    //十六进制
    _textView.layer.borderColor = [ssRGBHex(0xcccccc) CGColor];
    _textView.layer.borderColor = ssRGBHex(0xeeeeee).CGColor;
    
    _button.backgroundColor = ssRGBHex(0xeaeaea);
    [_button setBackgroundColor:ssRGBHex(0xD0D6D0)];
    _button.backgroundColor = ssRGBHexAlpha(0x000000, 0.439);
    [_button setBackgroundColor:ssRGBHexAlpha(0x000000, 0.439)];
    
    二、设置颜色的分类 UIColor+Addition.h
    ①分类回顾介绍

    分类的小括号中有分类名字

    @interface 类名(分类名字)
    /*方法声明*/
    @end
    @implementation类名(分类名字)
    /*方法实现*/
    @end
    

    分类特点:

    分类只能扩充方法,不能扩展属性和成员变量(如果包含成员变量会直接报错)。
    如果分类中声明了一个属性,那么分类只会生成这个属性的set、get方法声明,也就是不会有实现。

    ②创建设置颜色的分类

    UIColor + Addition.h 声明

    #import <UIKit/UIKit.h>
    
    @interface UIColor (Addition)
    //设置RGB颜色
    + (UIColor *)red:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue alpha:(CGFloat)alpha;
    //将颜色转换成RGB
    + (NSArray *)convertColorToRGB:(UIColor *)color;
    //设置十六进制颜色
    + (UIColor *)colorWithHex:(NSInteger)hex;
    + (UIColor*)colorWithHexString:(NSString *)hexString;
    @end
    

    UIColor + Addition.m 实现

    #import "UIColor+Addition.h"
    
    @implementation UIColor (Addition)
    + (UIColor *)red:(NSInteger)red green:(NSInteger)green blue:(NSInteger)blue alpha:(CGFloat)alpha {
        return [UIColor colorWithRed:red/255.0 green:green/255.0 blue:blue/255.0 alpha:alpha];
    }
    
    + (NSArray *)convertColorToRGB:(UIColor *)color {
        NSInteger numComponents = CGColorGetNumberOfComponents(color.CGColor);
        NSArray *array = nil;
        if (numComponents == 4) {
            const CGFloat *components = CGColorGetComponents(color.CGColor);
            array = @[@((int)(components[0] * 255)),
                      @((int)(components[1] * 255)),
                      @((int)(components[2] * 255))];
        }
        return array;
    }
    
    + (UIColor *)colorWithHex:(NSInteger)hex {
        return [UIColor colorWithRed:((float)((hex & 0xff0000) >> 16))/255.0 green:((float)((hex & 0x00ff00) >> 8))/255.0 blue:((float)(hex & 0x0000ff))/255.0 alpha:1.0];
    }
    
    +(UIColor *) 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 colorComponentFrom: colorString start: 0 length: 1];
                green = [self colorComponentFrom: colorString start: 1 length: 1];
                blue  = [self colorComponentFrom: colorString start: 2 length: 1];
                break;
            case 4: // #ARGB
                alpha = [self colorComponentFrom: colorString start: 0 length: 1];
                red   = [self colorComponentFrom: colorString start: 1 length: 1];
                green = [self colorComponentFrom: colorString start: 2 length: 1];
                blue  = [self colorComponentFrom: colorString start: 3 length: 1];
                break;
            case 6: // #RRGGBB
                alpha = 1.0f;
                red   = [self colorComponentFrom: colorString start: 0 length: 2];
                green = [self colorComponentFrom: colorString start: 2 length: 2];
                blue  = [self colorComponentFrom: colorString start: 4 length: 2];
                break;
            case 8: // #AARRGGBB
                alpha = [self colorComponentFrom: colorString start: 0 length: 2];
                red   = [self colorComponentFrom: colorString start: 2 length: 2];
                green = [self colorComponentFrom: colorString start: 4 length: 2];
                blue  = [self colorComponentFrom: colorString start: 6 length: 2];
                break;
            default:
                blue=0;
                green=0;
                red=0;
                alpha=0;
                break;
        }
        return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
    }
    
    +(CGFloat) 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
    
    ③RGB十六进制颜色设置分类的使用

    在使用的位置导入头文件,或者直接放到pch文件中。

    设置RGB颜色

    bgView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.7];
    

    获取颜色的RGB值

    NSArray *arr = [UIColor convertColorToRGB:[UIColor purpleColor]];
    

    本地设置十六进制颜色

    [[UIColor colorWithHex:0xF6F6F6] setFill];
    [[UIColor colorWithHex:0xF6F6F6] setStroke];
    [_titleLabel setTextColor:[UIColor colorWithHex:0x666666]];
    

    字符串设置十六进制颜色

    _view.backgroundColor = [UIColor colorWithHexString:@"ffffff"];
    

    我是楚简约,感谢您的阅读,

    喜欢就点个赞呗,“❤喜欢”,

    鼓励一下,你在看,我就继续写~

    非简书用户,可以点右上角的三个“...”,然后"在Safari中打开”,就可以点赞咯~


    相关文章

      网友评论

        本文标题:iOS 常用RGB十六进制颜色设置的宏定义、方法

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