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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容