CALayer 详解

本文深入探讨了CALayer与UIView的区别,强调CALayer作为底层内容绘制对象的角色。介绍了CALayer的重要属性,如背景色、阴影属性、子层管理,以及关键方法,如添加、移除和管理子层。同时指出,虽然UIView提供了事件响应能力,但其显示依赖于内部的CALayer对象,两者相辅相成。

CALayer 详解

综述

UIView的继承结构为:UIResponder:NSObject。可以看出UIView的直接父类为UIResponder类,.CALayer的继承结构:NSObject,直接从NSObject继承,因为缺少了UIResponder类,由上可见UIResponder是用来响应事件的,也就是说UIView可以响应用户事件,所以CALayer不能响应任何的用户事件,UIView是在/System/Library/Frameworks/UIKit.framework中定义的。
我们都知道UIKit主要是用来构建用户界面并且是可以响应事件的。CALayer在/System/Library/Frameworks/QuartzCore.framework定义的。而且CALayer作为一个低级的可以承载绘制内容的底层对象出现在该框架中。

UIView 和CALayer的区别

综上来看UIView与CALayer的最大区别在于UIView可以响应用户事件,而CALayer不可以。UIView侧重于对显示内容的管理,CALayer侧重于对内容的绘制。QuartzCore是iOS中提供图像绘制的基础库,并且CALayer是定义在该框架中的,所以UIView是对CALayer的封装。UIView和CALayer相互依赖,UIView依赖于CALayer提供的内容,CALayer依赖UIView提供的容器来显示绘制的内容。但归根到底CALayer是这一切的基础,如果没有CALayer,UIView自身也不会存在,UIView是一个特殊的CALayer的实现,添加了响应事件的能力。
  其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层,通过操作这个CALayer对象,可以很方便地调整UIView的一些界面属性,比如:阴影、圆角大小、边框宽度和颜色等
苹果官方文档:

Core Animation doesn’t provide a means for actually displaying layers in a window, they must be hosted by a view. When paired with a view, the view must provide event-handling for the underlying layers, while the layers provide display of the content.
The view system in iOS is built directly on top of Core Animation layers. Every instance of UIView automatically creates an instance of a CALayer class and sets it as the value of the view’s layer property. You can add sublayers to the view’s layer as needed.
On Mac OS X you must configure an NSView instance in such a way that it can host a layer

属性

设置背景色,
阴影的偏差值,
阴影的半径,
阴影的颜色,
阴影的透明度,
子层的frame值。
把新的层add到view的层里。
设置边缘宽度
设置边缘颜色
代码块:

CALayer *subLayer=[CALayerlayer];

subLayer.frame=CGRectMake(80,140, 100, 100);

subLayer.backgroundColor=[UIColorredColor].CGColor;

subLayer.cornerRadius=15;

subLayer.shadowColor=[UIColorblueColor].CGColor;

subLayer.shadowOffset=CGSizeMake(0,2.0);

subLayer.shadowOpacity=1.0;

subLayer.borderColor=[UIColoryellowColor].CGColor;

subLayer.borderWidth=3.0;

[self.view.layeraddSublayer:subLayer];
```

其他重要属性

1、masksToBounds : 很重要的属性,可以用此属性来防止子元素大小溢出父元素,如若防止溢出,设为 true
2、shadowColor:设置阴影
3、shadowOpacity; 阴影透明度
4、shadowOffset;阴影偏移
5、shadowRadius:阴影圆角
6、contents 设置layer内容,可以为image
7、sublayers 子layers
8、superlayer 父layer

重要方法

1、addSublayer: add new layer
2、removeFromSuperlayer
3、insertSublayer:atIndex:
4、insertSublayer:below:
5、insertSublayer:above:
6、replaceSublayer:with:
以上6方法跟UIView类似,不在赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值