Objective-C的UIColor学习笔记

UIColor - 颜色数据对象

存储颜色数据的对象,有时也存储不透明度。颜色对象可以通过多种方式创建,UIKit提供了标准的系统颜色(如红色、橙色、黄色等),可以用于为UI元素(如标签、文本和按钮)指定系统提供的颜色,还可以通过指定颜色分量值(例如 RGB、色调和饱和度)来创建颜色对象,还可以从其他颜色对象创建颜色,甚至从图像中创建基于图案的颜色。

大多数开发人员不需要子类化UIColor。唯一可能需要子类化的情况是需要支持其他颜色空间或颜色模型。如果进行子类化,添加的属性和方法必须可以安全地从多个线程中使用。

UIColor常用属性
  • 标准的系统颜色:
// 黑色
@property(class, nonatomic, readonly) UIColor *blackColor; 
// 深灰色
@property(class, nonatomic, readonly) UIColor *darkGrayColor;   
// 浅灰色
@property(class, nonatomic, readonly) UIColor *lightGrayColor;  
// 白色
@property(class, nonatomic, readonly) UIColor *whiteColor;      
// 灰色
@property(class, nonatomic, readonly) UIColor *grayColor;      
// 红色
@property(class, nonatomic, readonly) UIColor *redColor;        
// 绿色
@property(class, nonatomic, readonly) UIColor *greenColor;    
// 蓝色
@property(class, nonatomic, readonly) UIColor *blueColor;      
// 青色
@property(class, nonatomic, readonly) UIColor *cyanColor;      
// 黄色
@property(class, nonatomic, readonly) UIColor *yellowColor;     
// 品红色
@property(class, nonatomic, readonly) UIColor *magentaColor;    
// 橙色
@property(class, nonatomic, readonly) UIColor *orangeColor;     
// 紫色
@property(class, nonatomic, readonly) UIColor *purpleColor;    
// 棕色
@property(class, nonatomic, readonly) UIColor *brownColor;      
// 透明色
@property(class, nonatomic, readonly) UIColor *clearColor;   
@property(nonatomic,readonly) CGColorRef CGColor;

属性描述与接收器颜色相对应的Quartz颜色参考。通常用于图层�(CALayer)的边框、阴影等颜色。

@property(nonatomic,readonly) CIColor   *CIColor API_AVAILABLE(ios(5.0));

属性描述与颜色对象相对应的核心图像(Core Image)颜色。如果颜色对象未使用Core Image颜色初始化,则此属性将引发异常。此属性中的颜色对象不会自动适应“暗模式”的更改。

UIColor常用函数
+ (UIColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha;

函数描述 :使用指定的不透明度和灰度值创建颜色对象

参数 :

white :颜色对象的灰度值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的灰度值被解释为0.0,高于1.0的值被解释为1.0。值越小灰度越高,0.0为黑色,值越大灰度越低,1.0为白色

alpha : 颜色对象的不透明度值,指定为0.0到1.0之间的值。小于0.0的Alpha值解释为0.0,大于1.0的值解释为1.0。

返回值 : 颜色对象。此对象表示的颜色信息位于设备的灰色颜色空间中。

+ (UIColor *)colorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha;

函数描述 :使用指定的不透明度和HSB颜色空间组件值创建颜色对象

参数 :

hue : 颜色对象的色调值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的色调值解释为0.0,高于1.0的色调值解释为1.0。

saturation : 颜色对象的饱和度值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的饱和值解释为0.0,高于1.0的值解释为1.0。

brightness : 颜色对象的亮度值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的亮度值解释为0.0,高于1.0的亮度值解释为1.0。

alpha : 颜色对象的不透明度值,指定为0.0到1.0之间的值。小于0.0的Alpha值解释为0.0,大于1.0的值解释为1.0。

返回值 : 颜色对象。此对象表示的颜色信息位于RGB颜色空间中。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展范围的sRGB颜色空间中指定的。在早期版本的iOS上,颜色是在设备RGB颜色空间中指定的。

\color{red}{例如视图背景色随机 : }

UIView *view = [[UIView alloc]initWithFrame:CGRectZero];
view.backgroundColor = [UIColor colorWithHue:drand48() saturation:1.0 brightness:1.0 alpha:1.0];
[self.view addSubview:view];
[view mas_makeConstraints:^(MASConstraintMaker *make) {
    make.center.equalTo(self.view);
    make.size.mas_equalTo(CGSizeMake(100, 100));
}];
+ (UIColor *)colorWithRed:(CGFloat)red green:(CGFloat)green blue:(CGFloat)blue alpha:(CGFloat)alpha;

函数描述 : 使用指定的不透明度和RGB组件值创建颜色对象

参数 :

red : 颜色对象的红色值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的红色值解释为0.0,高于1.0的值解释为1.0。

green : 颜色对象的绿色值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的绿色值被解释为0.0,高于1.0的值被解释为1.0。

blue : 颜色对象的蓝色值。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展的颜色空间中指定的,并且输入值永远不会被钳制。在早期版本的iOS上,低于0.0的蓝色值被解释为0.0,高于1.0的值被解释为1.0。

alpha : 颜色对象的不透明度值,指定为0.0到1.0之间的值。小于0.0的Alpha值解释为0.0,大于1.0的值解释为1.0

返回值 : 颜色对象。此对象表示的颜色信息位于RGB颜色空间中。在为iOS 10或更高版本链接的应用程序上,颜色是在扩展范围的sRGB颜色空间中指定的。在早期版本的iOS上,颜色是在设备RGB颜色空间中指定的。

+ (UIColor *)colorWithPatternImage:(UIImage *)image;

函数描述使用指定的图像创建颜色对象。可以使用图案颜色设置填充或边框颜色。像设置纯色一样。在绘制过程中,图案颜色中的图像按需要平铺以覆盖给定的区域。默认情况下,返回颜色的相位为0,这将导致图像的左上角与绘图原点对齐。要更改相位,请将颜色设置为当前颜色,然后使用CGContextSetPatternPhase函数更改相位。

参数 :

image : 创建图案颜色时要使用的图像。

返回值 : 图案颜色。

- (BOOL)getWhite:(nullable CGFloat *)white alpha:(nullable CGFloat *)alpha API_AVAILABLE(ios(5.0));

函数描述返回颜色的灰度分量。如果该颜色位于兼容的颜色空间中,则该颜色可以转换为灰度格式并返回给应用程序。如果颜色不在兼容的颜色空间中,则参数无效。

参数 :

white : 返回时,颜色对象的灰度成分。在为iOS 10或更高版本链接的应用程序上,灰度组件是在扩展范围的灰色空间中指定的,可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

alpha : 返回时,颜色对象的不透明度组件,指定为介于0.0和1.0之间的值。

返回值 : 如果颜色可以转换,则为“YES”,否则为“NO”。

- (BOOL)getHue:(nullable CGFloat *)hue saturation:(nullable CGFloat *)saturation brightness:(nullable CGFloat *)brightness alpha:(nullable CGFloat *)alpha API_AVAILABLE(ios(5.0));

函数描述返回组成HSB颜色空间中颜色的组件。如果该颜色位于兼容的颜色空间中,则该颜色可以转换为HSB颜色空间,其组件将返回到应用程序。如果颜色不在兼容的颜色空间中,则参数无效。

参数 :

hue : 返回时,颜色对象的色调组件。在为iOS 10或更高版本链接的应用程序上,色调组件在扩展范围颜色空间中指定,并且可以具有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

saturation : 返回时,颜色对象的饱和度分量。在为iOS 10或更高版本链接的应用程序上,饱和分量是在扩展范围颜色空间中指定的,可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

brightness : 返回时,颜色对象的亮度分量。在为iOS 10或更高版本链接的应用程序上,亮度组件是在扩展范围颜色空间中指定的,可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

alpha : 返回时,颜色对象的不透明度组件,指定为介于0.0和1.0之间的值。

返回值 : 如果颜色可以转换,则为“YES”,否则为“NO”。

- (BOOL)getRed:(nullable CGFloat *)red green:(nullable CGFloat *)green blue:(nullable CGFloat *)blue alpha:(nullable CGFloat *)alpha API_AVAILABLE(ios(5.0));

函数描述返回组成RGB颜色空间中颜色的组件。如果该颜色位于兼容的颜色空间中,则该颜色可以转换为RGB格式,其组件将返回到应用程序。如果颜色不在兼容的颜色空间中,则参数无效。

参数 :

red : 返回时,颜色对象的红色组件。在为iOS 10或更高版本链接的应用程序上,红色组件在扩展范围的sRGB颜色空间中指定,并且可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

green : 返回时,颜色对象的绿色组件。在为iOS 10或更高版本链接的应用程序上,绿色组件在扩展范围的sRGB颜色空间中指定,并且可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

blue : 返回时,颜色对象的蓝色组件。在为iOS 10或更高版本链接的应用程序上,蓝色组件在扩展范围的sRGB颜色空间中指定,并且可以有任何值。介于0.0和1.0之间的值在sRGB颜色范围内。在早期版本的iOS上,指定的值始终在0.0到1.0之间。

alpha : 返回时,颜色对象的不透明度组件,指定为介于0.0和1.0之间的值。

返回值 : 如果颜色可以转换,则为“YES”,否则为“NO”。

- (UIColor *)colorWithAlphaComponent:(CGFloat)alpha;

函数描述创建颜色对象,该对象具有与调用方相同的颜色空间和组件值,但具有指定的不透明度。具有显式不透明度组件的子类应重写此方法以返回具有指定alpha的颜色。

参数 :

alpha : 新颜色对象的不透明度值,指定为0.0到1.0之间的值。小于0.0的Alpha值解释为0.0,大于1.0的值解释为1.0。

返回值 : 新的UIColor对象。

\color{red}{将16进制的颜色字符串转换为颜色:}

- (void)viewDidLoad {
    
    CGRect screen = [[UIScreen mainScreen]bounds];
    CGFloat viewWidth = 150.0;
    CGFloat viewHeight = 150.0;
    
    UIView *View = [[UIView alloc]initWithFrame:CGRectMake((screen.size.width - viewWidth) / 2, (screen.size.height - viewHeight) / 2, viewWidth, viewHeight)];
    View.backgroundColor = [self colorOfHexString:@"#58b4ff"];
    [self.view addSubview:View];
}

- (UIColor*)colorOfHexString:(NSString*)hexString {
    NSScanner* scanner = [NSScanner scannerWithString:hexString];
    if ([hexString hasPrefix:@"#"]) {
        [scanner setScanLocation:1];
    }
    unsigned hexNum;
    if (![scanner scanHexInt:&hexNum]) {
        return nil;
    }
    
    int r = (hexNum >> 16) & 0xFF;
    int g = (hexNum >> 8) & 0xFF;
    int b = (hexNum)&0xFF;
    
    return [UIColor colorWithRed:r / 255.0f green:g / 255.0f blue:b / 255.0f alpha:1.0f];
}

效果:

屏幕快照 2019-07-10 下午11.05.37.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • .m的文件 用的时候也很简单, 这样就OK了.
    贼海鸥阅读 412评论 0 0
  • 今天是中元节,要纪念那些已经逝去的人。 如果放大“逝去”的概念,那些虽然活着、但是已经从你生命中抽离的,也是“已亡...
    我是游记阅读 343评论 2 1
  • 还记得小时候,自己想要变成一只鸟,可以飞到自己想要去的任何地方 而现在,我只想成为一朵云 一朵云,随风而去 一朵云...
    迪子Air阅读 203评论 0 0
  • 去过的旅行能成为回忆,没去过的旅行不也能成为回忆吗? 冰淇凌才是真正的情人
    小楠丫阅读 169评论 0 0