您的位置:首页 > 产品设计 > UI/UE

CALayer与UIView的关系和作用

2014-09-10 21:41 459 查看
一,CALayer原理

在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层。在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层。当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示。那么这个过程是怎么的呢?

首先可以认为,UIView是其属性CALayer的delegate,即:

   
UIView *view;
    view.layer.delegate == view;
view的完整显示过程:
   
1. view.layer会准备一个Layer Graphics Contex(图层类型的上下文)
   
2. 调用view.layer.delegate(view)的drawLayer:inContext:,并传入刚才准备好的上下文
   
3. view的drawLayer:inContext:方法内部又会调用view的drawRect:方法
   
4. view就可以在drawRect:方法中实现绘图代码,所有东西最终都绘制到view.layer上面
   
5. 系统再将view.layer的内容拷贝到屏幕,于是完成了view的显示

二,CALayer的使用举例

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

> 阴影
> 圆角大小
> 边框宽度和颜色
代码示例:

//设置图层的颜色
self.yellowView.layer.backgroundColor = [UIColor blueColor].CGColor;
//设置圆角
self.yellowView.layer.cornerRadius = 15;
//设置阴影
//设置阴影的颜色
self.yellowView.layer.shadowColor = [UIColor greenColor].CGColor;
//阴影的透明度
self.yellowView.layer.shadowOpacity = 0.5;
//阴影的显示起始位置
self.yellowView.layer.shadowOffset = CGSizeMake(20,20) ;

//设置形变属性
self.imageView.layer.transform = CATransform3DMakeTranslation(30,50,0);
self.imageView.layer.transform = CATransform3DMakeScale(1,2,1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: