前言

	NS_CLASS_AVAILABLE_IOS(2_0) @interface UIColor : NSObject <NSSecureCoding, NSCopying>
@available(iOS 2.0, *) public class UIColor : NSObject, NSSecureCoding, NSCopying
  • UIColor、CIColor 和 CGColor 出现在不同的类库里面,其实就是颜色存储方式不同而已,比如 999 可以用 10 进制、2 进制、16 进制等存储。三者之间都是能够方便转换的,特别是很多构造函数。

1、UIColor 的创建

  • Objective-C

    • 使用系统定义好的颜色创建

      	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"]];
    • 由 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];
  • Swift

    • 使用系统定义好的颜色创建

      	let color1:UIColor = UIColor.blueColor()
      
      	// 附带设置颜色的透明度
      let color1:UIColor = UIColor.blackColor().colorWithAlphaComponent(0.5)
    • 由白色透明度创建

      	// alpha:透明度,1 不透明
      let color2:UIColor = UIColor(white: 1, alpha: 0.5)
    • 由三原色创建

      	// arc4random()%256/255.0 获取小于等于 1 大于 0 的随机数字
      let red:CGFloat = CGFloat(arc4random()%UInt32(256/255.0))
      let green:CGFloat = CGFloat(arc4random()%UInt32(256/255.0))
      let blue:CGFloat = CGFloat(arc4random()%UInt32(256/255.0)) // Red,green,blue 值的范围是 0 ~ 1,alpha:透明度,1 不透明
      let color3:UIColor = UIColor(red: red, green: green, blue: blue, alpha: 1)
    • 由图片创建

      	let color4:UIColor = UIColor(patternImage: UIImage(named: "13")!)

2、UIColor 与 CIColor 和 CGColor 的相互转换

  • Objective-C

    	// UIColor 转 CGColor
    CGColorRef color = [[UIColor greenColor] CGColor];
  • Swift

    	// UIColor 转 CGColor
    let color:CGColorRef = UIColor.greenColor().CGColor

3、由十六进制颜色值创建 RGB 颜色值

  • 具体实现代码见 GitHub 源码 QExtension

  • 适用于 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];

iOS - UIColor的更多相关文章

  1. iOS --- UIColor中使用16进制选取颜色

    iOS中的UIColor能够使用16进制来选取颜色. 预先定义例如以下: #define UIColorFromHex(s) [UIColor colorWithRed:(((s & 0xFF ...

  2. iOS UIColor RGB HEX

    +(UIColor *)colorWithR:(CGFloat)r g:(CGFloat)g b:(CGFloat)b a:(CGFloat)a{ return [UIColor colorWithR ...

  3. IOS UIColor 自定义颜色

    使用 UIColor定义颜色 和 同 CIColor 与  CGColor 之间的联系.转换 1. 利用UIColor展现 #F6F6F6 这个传统的颜色 #F6F6F6 为一个 16 进制表示的RP ...

  4. iOS - 对UIColor颜色反差

    iOS中默认的很多方法可以获得不同种颜色的UIColor对象,但是White和Black等灰度值其实是用灰阶透明度调制 +colorWithWhite:alpha:,这些CGColorRef拥有2个组 ...

  5. iOS 十六进制的颜色值转换为UIColor

    UIColor+Hex.h里面中 #import <UIKit/UIKit.h> @interface UIColor (Hex) + (UIColor *) colorWithHexSt ...

  6. IOS中十六进制的颜色转换为UIColor

    IOS中十六进制的颜色转换为UIColor #pragma mark - 颜色转换 IOS中十六进制的颜色转换为UIColor + (UIColor *) colorWithHexString: (N ...

  7. iOS开发——图层OC篇&UIColor深入研究(CGColor,CIColor)

    UIColor深入研究(CGColor,CIColor) 由于跟人比较喜欢研究关于图层与动画方面的技术,正打算看看别人写的好东西,就遇到了好几个问题, 第一:UIClor类方法的使用 就是关于UICo ...

  8. IOS中将十进制色值转换成UIColor

    最近因项目需要,在网上找了一些代码,整合了一下,实现的效果就是将10进制的RGB色值转换IOS用的UIColor,方法还有缺陷,有待改进 UIColor *getColorFromString(NSS ...

  9. iOS开发-从16进制颜色中获取UIColor

    目前iOS中设置UIColor只能使用其枚举值.RGB等方法,不能直接将常用的16进制颜色值直接转为UIColor对象,所以写了点代码,将16进制颜色值转为UIColor. 代码如下, //头文件#i ...

随机推荐

  1. SQLITE3 使用总结

    转自: http://blog.chinaunix.net/uid-8447633-id-3321394.html 前序: Sqlite3 的确很好用.小巧.速度快.但是因为非微软的产品,帮助文档总觉 ...

  2. 【转】Cookie和Session的区别详解

    转载地址:http://www.phperzone.cn/portal.php?aid=541&mod=view 一.cookie机制和session机制的区别 具体来说cookie机制采用的 ...

  3. 【转】JAVA变量path , classpth ,java_home设设置作用和作用

    转载地址:http://bbs.tech.163.com/bbs/tech_0ik1/147645925.html 在把jdk安装到计算机中之后,我们来进行设置使java环境能够使用. 首先右键点我的 ...

  4. mini.open打开窗口时传递参数

    mini.open({ url: "xxx.html", showMaxButton: false, allowResize: false, title: '标题', width: ...

  5. python-day7 python内置模块 面向对象

    1.configparser模块 configparser用于处理特定格式的文件,其本质上是利用open来操作文件 # 注释1 ; 注释2 [section1] # 节点 k1 = v1 # 值 k2 ...

  6. common-pool2 使用

    common-pool2提供了3中对象池管理方式,它们的使用方式基本一样,这里以GenericObjectPool对象池为例介绍其使用方式,一般实现自己的对象池需要经过2个步骤 1.实现PooledO ...

  7. html介绍

    Html的介绍 Html 是一种标记语言,主要的用处是开发网页 展示出文字,图片,视频,声音等等 是我们web开发的基础 做什么 所谓的静态页面,指的是能不能交互,而不是东西能不能动 网页设计师(ht ...

  8. HDU How many integers can you find 容斥

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. Codeforces Round #368 (Div. 2) A

    Description Small, but very brave, mouse Brain was not accepted to summer school of young villains. ...

  10. 各操作系统配置java环境变量

    Windows 1. JAVA_HOME -->>  E:\java-tools\Java\JDK8_64\jdk1.8.0_77 2. path -->> %JAVA_HOM ...