https://www.cnblogs.com/smileEvday/archive/2012/06/05/UIColor_CIColor_CGColor.html
https://note.youdao.com/ynoteshare1/index.html?id=d323bc43526ad1fd4cd2ca708916c893&type=note
关于CGColor和UIColor, 平时一般用到UIColor比较多, 在我用到的就只有 这一句
_btn.layer.borderColor = [[UIColor blackColor]CGColor];
下面大致介绍一下UIColor和CGColor的基本概念:
UIColor是UIKit中存储颜色信息的一个重要的类,一个UIColor对象包含了颜色和透明度的值,它的颜色空间已经针对IOS进行了优化。UIColor包含了一些类方法用于创建一些最常见的颜色,如白色,黑色,红色,透明色等,这些颜色的色彩空间也不尽相同(白色和黑色是kCGColorSpaceDeviceGray,红色的色彩空间是kCGColorSpaceDeviceRGB)。
此外UIColor还有两个重要的属性:一个是CGColor,一个是CIColor(5.0之后添加)。这两个属性就可以把UIColor,CGColor,CIColor三个对象联系起来了,后面会详细介绍这三者之间的转换。
CGColor主要用于CoreGaphics框架之中,CGColor其实是个结构体,而我们通常在使用的CGColor的时候使用的是它的引用类型CGColorRef。CGColor主要由CGColorSapce和Color Components两个部分组成,同样的颜色组成,如果颜色空间不同的话,解析出来的结果可能会有所不同。这就像我们在处理图片数据的时候,如果把RGBA格式当成BGRA格式处理的结果可想而知。在Quartz 2D中CGColor常用来设置context的填充颜色,设置透明度等。
UIView之所以能显示在屏幕上,完全是因为它内部的一个图层
在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能
因此,通过操作CALayer对象,可以很方便地调整UIView的一些外观属性
borderColor要使用CGColor而不能使用UIColor
CALayer sits at a lower technical level than UIButton, which means it doesn't understand what a UIColor is. UIButton knows what a UIColor is because they are both at the same technical level, but CALayer is below UIButton, so UIColor is a mystery.
CALayer的技术水平比UIButton低,这意味着它不理解UIColor是什么。UIButton知道UIColor是什么因为它们都在相同的技术水平,但是CALayer在UIButton之下,所以UIColor是一个谜。
CGColor存在于较为底层的CoreGraphics框架中,它是一个结构体
UIColor存在于相对CoreGraphics框架较高的UIKit框架中,他是一个类
CoreGraphics框架是可以跨平台使用的
UIKit框架仅限于iOS
为了保证移植性以及框架的统一性,不能互用