两者的关系
在创建UIView对象时,UIView内部会自动创建一个图层(CALayer对象),而当UIView对象需要显示到屏幕上时,会调用drawRect:方法进行绘图,然后把内容都绘制到图层上,绘图完毕,系统就会将图层展示在屏幕上。
总得来说,UIView并不具有显示的功能,是它内部的层来完成显示这一项工作,但VIew有响应事件的功能。
CALayer的基本使用
通过操作UIView对象里的CALayer对象,我们可以很方便地调整UIView的一些外观属性。比如
- 阴影
- 边框
- 圆角等等
UIView和UIImageView在操作CALayer上的区别
-
当我们给UIImageView添加圆角时会发现圆角出来了但是显示图片的部分并没有出现圆角
而当我们给layer的masksToBounds属性设置为yes后才会显示出我们要的效果
而UIView设置圆角是不需要将masksToBounds属性设置为YES的
两者的区别在于 —— 对View进行圆角的设置只会作用在layer图层上,而展示Image又是在另一个图层上,它是以CGImage的形式存储在layer的contents属性上,而将masksToBounds设置为YES是为了去掉View的根层边界外的内容。
UIView和CALayer的选择
- CALayer是定义在QuartzCore框架中的,CGImageRef,CGColorRef这两种数据类型是定义在COreGraphics框架中的,而UIImage和UIColor是定义在UIKit框架的
- QuartzCore框架和COreGraphics框架是可以跨平台使用的,在IOS和Mac OS X上都可以使用,但是UIKit只能在IOS中使用
- CALayer可以做出跟UIView一样的效果,但是由于UIVIew继承于UIResponder,可以处理事件的响应,而CALayer不可以