- UIColor、CIColor 和 CGColor 出如今不一樣的類庫裏面,其實就是顏色存儲方式不一樣而已,好比 999 能夠用 10 進制、2 進制、16 進制等存儲。三者之間都是可以方便轉換的,特別是不少構造函數。
0、極速宏
/** 顏色生成 */
#define CHColor_A(r,g,b,a) [UIColor colorWithRed:r/255.f green:g/255.f blue:b/255.f alpha:a]
/** 顏色生成 */
#define CHColor(r,g,b) CHColor_A(r,g,b,1.0)
/** 十六進制顏色 -> 0x123456 */
#define CHRGB16HEX(hex_0x) [UIColor colorWithRed:((float)((hex_0x & 0xFF0000) >> 16))/255.0 green:((float)((hex_0x & 0xFF00) >> 8))/255.0 blue:((float)(hex_0x & 0xFF))/255.0 alpha:1.0]
#define CHRGB16HEX_A(hex_0x, a) [UIColor colorWithRed:((float)((hex_0x & 0xFF0000) >> 16))/255.0 green:((float)((hex_0x & 0xFF00) >> 8))/255.0 blue:((float)(hex_0x & 0xFF))/255.0 alpha:a]
/** 設置隨機顏色 */
#define CHRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
/** 黑色 */
#define Black_Color [UIColor blackColor]
/** 深灰色 */
#define DarkGray_Color [UIColor darkGrayColor]
/** 淺灰色 */
#define LightGray_Color [UIColor lightGrayColor]
/** 白色 */
#define White_Color [UIColor whiteColor]
/** 灰色 */
#define Gray_Color [UIColor grayColor]
/** 紅色 */
#define Red_Color [UIColor redColor]
/** 綠色 */
#define Green_Color [UIColor greenColor]
/** 藍色 */
#define Blue_Color [UIColor blueColor]
/** 藍綠色 */
#define Cyan_Color [UIColor cyanColor]
/** 黃色 */
#define Yellow_Color [UIColor yellowColor]
/** 品紅色 */
#define Magenta_Color [UIColor magentaColor]
/** 橘黃色 */
#define Orange_Color [UIColor orangeColor]
/** 紫色 */
#define Purple_Color [UIColor purpleColor]
/** 棕色 */
#define Brown_Color [UIColor brownColor]
/** 透明色 */
#define Clear_Color [UIColor clearColor]
一、UIColor 的建立
UIColor *color1 = [UIColor blueColor];
// 附帶設置顏色的透明度
UIColor *color1 = [[UIColor blackColor] colorWithAlphaComponent:0.5];
// alpha:透明度,1 不透明
UIColor *color2 = [UIColor colorWithWhite:1 alpha:0.5];
// arc4random()%256/255.0 獲取小於等於 1 大於 0 的隨機數字
CGFloat red = arc4random()%256/255.0;
CGFloat green = arc4random()%256/255.0;
CGFloat blue = arc4random()%256/255.0;
// Red,green,blue 值的範圍是 0 ~ 1,alpha:透明度,1 不透明
UIColor *color3 = [UIColor colorWithRed:red green:green blue:blue alpha:1];
UIColor *color4 = [UIColor colorWithPatternImage:[UIImage imageNamed:@"13"]];
NSString *colorString = @"#FF0000";
// 十六進制數字字符串轉十進制數字
NSString *s1 = [colorString substringWithRange:NSMakeRange(1, 2)];
unsigned long c1 = strtoul([s1 UTF8String], 0, 16);
NSString *s2 = [colorString substringWithRange:NSMakeRange(3, 2)];
unsigned long c2 = strtoul([s2 UTF8String], 0, 16);
NSString *s3 = [colorString substringWithRange:NSMakeRange(5, 2)];
unsigned long c3 = strtoul([s3 UTF8String], 0, 16);
// Red,green,blue 值的範圍是 0 ~ 1,alpha:透明度,1 不透明
UIColor *color5 = [UIColor colorWithRed:c1/255.0 green:c2/255.0 blue:c3/255.0 alpha:1];
二、UIColor 與 CIColor 和 CGColor 的相互轉換
// UIColor 轉 CGColor
CGColorRef color = [[UIColor greenColor] CGColor];
// CGColor 轉 UIColor
UIColor *CG_To_UIColor = [UIColor colorWithCGColor:self.outerCircleV.layer.borderColor];
三、由十六進制顏色值建立 RGB 顏色值
- 適用於 0Xc83c2三、#c83c2三、c83c23 格式的十六進制顏色值。
/// 由十六進制顏色值建立 RGB 顏色值,帶透明度設置
+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha {
NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
// String should be 6 or 8 characters
if ([cString length] < 6) {
return [UIColor clearColor];
}
// strip "0X" or "#" if it appears
if ([cString hasPrefix:@"0X"])
cString = [cString substringFromIndex:2];
if ([cString hasPrefix:@"#"])
cString = [cString substringFromIndex:1];
if ([cString length] != 6)
return [UIColor clearColor];
// Separate into r, g, b substrings
NSRange range;
range.location = 0;
range.length = 2;
// r、g、b
NSString *rString = [cString substringWithRange:range];
range.location = 2;
NSString *gString = [cString substringWithRange:range];
range.location = 4;
NSString *bString = [cString substringWithRange:range];
// Scan values
unsigned int r, g, b;
[[NSScanner scannerWithString:rString] scanHexInt:&r];
[[NSScanner scannerWithString:gString] scanHexInt:&g];
[[NSScanner scannerWithString:bString] scanHexInt:&b];
return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:alpha];
}
/// 由十六進制顏色值建立 RGB 顏色值
+ (UIColor *)colorWithHexString:(NSString *)color {
return [UIColor colorWithHexString:color alpha:1.0f];
}
// 0X 前綴格式
UIColor *color = [UIColor colorWithHexString:@"0Xc83c23"];
UIColor *color = [UIColor colorWithHexString:@"0Xc83c23" alpha:0.5];
// # 前綴格式
UIColor *color = [UIColor colorWithHexString:@"#c83c23"];
UIColor *color = [UIColor colorWithHexString:@"#c83c23" alpha:0.5];
// 無前綴格式
UIColor *color = [UIColor colorWithHexString:@"c83c23"];
UIColor *color = [UIColor colorWithHexString:@"c83c23" alpha:0.5];
四、其餘