前言

	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. maven打包异常

    maven打包异常,如图: 问题原因:服务器密码错了.

  2. Spring面试问题

    什么是Spring框架?Spring框架有哪些主要模块? 使用Spring框架有什么好处? 什么是控制反转(IOC)?什么是依赖注入? 请解释下Spring中的IOC? BeanFactory和App ...

  3. vs 常见问题汇总

    vs添加对dll的引用 我们在使用vs进行开发调试的时候经常会遇到一个问题,就是当我们的主工程引用到其他工程更新的dll(我们经常采用copy到工程目录的方法).亦或者当我们的多个工程引用到同一个dl ...

  4. [Unity3D][Vuforia][IOS]vuforia在unity3d中添加自己的动态模型,识别自己的图片,添加GUI,播放视频

    使用环境 unity3D 5 pro vuforia 4 ios 8.1(6.1) xcode 6.1(6.2) 1.新建unity3d工程,添加vuforia 4.0的工程包 Hierarchy中 ...

  5. SqlServer性能优化和工具Profiler(转)

    合理的优化和熟练的运用Profiler会让你更好的掌握系统的sql语句和存储过程的效率 目录 第1章 如何打开SQL Server Profile. 3 第2章 SQL Server Profile. ...

  6. JAVA基础知识之多线程——三种实现多线程的方法及区别

    所有JAVA线程都必须是Thread或其子类的实例. 继承Thread类创建线程 步骤如下, 定义Thead子类并实现run()方法,run()是线程执行体 创建此子类实例对象,即创建了线程对象 调用 ...

  7. boost库学习之regex

    一.背景 项目中许多地方需要对字符串进行匹配,比如根据指定的过滤字符串来过滤文件名.刚开始是排斥使用boost库的,第一,我不熟悉boost库:第二,如果引入第三方库,就会增加库的依赖,这样的后果是, ...

  8. java提高篇---LinkedList

    一.概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得L ...

  9. Java提高篇---Map总结

    一.Map概述 首先先看Map的结构示意图 Map:"键值"对映射的抽象接口.该映射不包括重复的键,一个键对应一个值. SortedMap:有序的键值对接口,继承Map接口. Na ...

  10. datagrid 重写属性

    $.fn.panel.defaults.loadMsg = '数据加载中请稍后--'; //设置默认的分页参数 if ($.fn.datagrid) { $.fn.datagrid.defaults. ...