前言
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中打開”,就可以點贊咯~