CGColor UIColor

阴福
2023-12-01

文章参考:

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

UIColor是UIKit中存储颜色信息的一个重要的类,一个UIColor对象包含了颜色和透明度的值,它的颜色空间已经针对IOS进行了优化。UIColor包含了一些类方法用于创建一些最常见的颜色,如白色,黑色,红色,透明色等,这些颜色的色彩空间也不尽相同(白色和黑色是kCGColorSpaceDeviceGray,红色的色彩空间是kCGColorSpaceDeviceRGB)。

此外UIColor还有两个重要的属性:一个是CGColor,一个是CIColor(5.0之后添加)。这两个属性就可以把UIColor,CGColor,CIColor三个对象联系起来了,后面会详细介绍这三者之间的转换。

二、CGColor

CGColor主要用于CoreGaphics框架之中,CGColor其实是个结构体,而我们通常在使用的CGColor的时候使用的是它的引用类型CGColorRef。CGColor主要由CGColorSapce和Color Components两个部分组成,同样的颜色组成,如果颜色空间不同的话,解析出来的结果可能会有所不同。这就像我们在处理图片数据的时候,如果把RGBA格式当成BGRA格式处理的结果可想而知。在Quartz 2D中CGColor常用来设置context的填充颜色,设置透明度等。

在上面一行句子中出现的layer

UIView之所以能显示在屏幕上,完全是因为它内部的一个图层

在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层

当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示换句话说,UIView本身不具备显示的功能,是它内部的层才有显示功能

因此,通过操作CALayer对象,可以很方便地调整UIView的一些外观属性

关于以上句子里用CGColorer不能用UIColor的原因

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

为了保证移植性以及框架的统一性,不能互用

 类似资料:

相关阅读

相关文章

相关问答