UIColor
- 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]
1、UIColor 的创建
1.1 使用系统定义好的颜色创建
UIColor *color1 = [UIColor blueColor];
// 附带设置颜色的透明度
UIColor *color1 = [[UIColor blackColor] colorWithAlphaComponent:0.5];
1.2 由白色透明度创建
// alpha:透明度,1 不透明
UIColor *color2 = [UIColor colorWithWhite:1 alpha:0.5];
1.3 由三原色创建
// 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];
1.4 由图片创建
UIColor *color4 = [UIColor colorWithPatternImage:[UIImage imageNamed:@"13"]];
1.5 由 16 进制字符串创建
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];
2、UIColor 与 CIColor 和 CGColor 的相互转换
// UIColor 转 CGColor
CGColorRef color = [[UIColor greenColor] CGColor];
// CGColor 转 UIColor
UIColor *CG_To_UIColor = [UIColor colorWithCGColor:self.outerCircleV.layer.borderColor];
3、由十六进制颜色值创建 RGB 颜色值
- 适用于 0Xc83c23、#c83c23、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];
4、其他
UIColor的更多相关文章
- iOS - 对UIColor颜色反差
iOS中默认的很多方法可以获得不同种颜色的UIColor对象,但是White和Black等灰度值其实是用灰阶透明度调制 +colorWithWhite:alpha:,这些CGColorRef拥有2个组 ...
- iOS UIColor RGB HEX
+(UIColor *)colorWithR:(CGFloat)r g:(CGFloat)g b:(CGFloat)b a:(CGFloat)a{ return [UIColor colorWithR ...
- UIColor 使用起来的坑
我们一般会用 UIColor 的RGB来生成颜色: [UIColor colorWithRed:220/255 green:220/255 blue:220/255 alpha:1.0];//这样生成 ...
- iOS 十六进制的颜色值转换为UIColor
UIColor+Hex.h里面中 #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexSt ...
- Swift - 生成随机颜色(Extension UIColor)
在开发中,我们有时需要生成一些随机的颜色.但 UIColor 没有提供方法或属性来直接获取随机颜色,这里对其进行扩展,方便使用. 1,扩展UIColor,增加随机颜色属性 1 2 3 4 5 6 7 ...
- 根据UIColor对象,获取对应的RGBA值
- (NSArray *)getRGBWithColor:(UIColor *)color { CGFloat red = 0.0; CGFloat green = 0.0; CGFloat blue ...
- UIColor与PatternImage
UIColor有一个方法叫做+ (UIColor *)colorWithPatternImage:(UIImage *)image;. 返回的是一个UIColor,但没有明确的RGB值,所以叫做pat ...
- 【代码笔记】iOS-16进制颜色与UIColor互转
一,效果图 二,工程目录. 三,代码 RootViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additio ...
- IOS中十六进制的颜色转换为UIColor
IOS中十六进制的颜色转换为UIColor #pragma mark - 颜色转换 IOS中十六进制的颜色转换为UIColor + (UIColor *) colorWithHexString: (N ...
- 通过颜色代码初始化UIColor
#define UIColorFromHEX(rgbValue) [UIColor \ colorWithRed:((float)((rgbValue & 0xFF0000) >> ...
随机推荐
- 动态规划算法(后附常见动态规划为题及Java代码实现)
一.基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 二.基本思想与策略 基本 ...
- [C++] 递归之全排列问题、半数集
一.递归的定义 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个原问题相似的规模较小的问题来求解. 二.用递归求解问题的主要步骤 1.找出相似性 ...
- 蓝桥杯 算法训练 ALGO-151 6-2递归求二进制表示位数
算法训练 6-2递归求二进制表示位数 时间限制:10.0s 内存限制:256.0MB 问题描述 给定一个十进制整数,返回其对应的二进制数的位数.例如,输入十进制数9,其对应的二进制数是1001 ...
- SQL简单嵌套查询与非嵌套查询的比较(MSSQL2005)
某天的工作是修复某个项目的bug,接着就发现,其sql极其混乱,有非常多的left join和in操作,还有嵌套查询(只有一个表的嵌套查询).不知道看到过哪里的资料说,嵌套查询速度慢,于是我把全部嵌套 ...
- 使用spring-boot-starter-amqp开发生产者应用
上一篇我们介绍了如何使用spring AMQP和RabbitMQ结合,开发消费者应用程序,使用的是Xml配置的Spring框架. 本篇我们仍然使用Spring AMQP开发生产者应用,不过我们使用零 ...
- MySQL 双主+keepalived 详细文档 M-M+keepalived
1. 操作系统,系统环境,目结结构,用户,权限,日志路径,脚本2. 配置规范化 1.1 操作系统准备 操作系统 Kylin Linux release 3.3.1707 (Core)数据库版本 mys ...
- C# 实现快捷键几种方法
本文讲解了三种方法实现C# button快捷键,如Alt + *(按钮快捷键),Ctrl+*及其他组合键等. 一. C# button快捷键之第一种:Alt + *(按钮快捷键) 在大家给button ...
- java基础知识(14)---API
API:(Application Programming Interface,编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理 ...
- windows服务编写和“以管理员运行”程序的方法
本文将首先解释如何 创建 一个定期查询可用物理内存并将结果写入某个文本文件的服务.然后指导你完成生成,安装和实现服务的整个过程. 第一步:主函数和全局定义 首先,包含所需的头文件.例子要调用 Win3 ...
- redis学习三 redis持久化
1,快照持久化 1简介 redis可以通过创建快照来获得某个时间点上的内存内容的数据副本,有了副本之后,就可以将副本发送到其他redis服务器上从而创建相同数据的从服务器,同时快照留在原 ...