iOS CALayer (图层的相关知识)
来源:互联网 发布:剑三光头捏脸数据 编辑:程序博客网 时间:2024/05/18 01:04
CALayer简介
- 在iOS中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮、一个文本标签、一个文本输入框、一个图标等等,这些都是UIView。
- 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层,在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个层
@property(nonatomic,readonly,retain) CALayer *layer;- 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了UIView的显示
- 换句话说,UIView本身不具备显示的功能,拥有显示功能的是它内部的图层。
在iOS中CALayer的设计主要是了为了内容展示和动画操作,CALayer本身并不包含在UIKit中,它不能响应事件。由于CALayer在设计之初就考虑它的动画操作功能,CALayer很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”。但是对于UIView的根图层而言属性的修改并不形成动画效果,因为很多情况下根图层更多的充当容器的做用,如果它的属性变动形成动画效果会直接影响子图层。另外,UIView的根图层创建工作完全由iOS负责完成,无法重新创建,但是可以往根图层中添加子图层或移除子图层。
CALayer与UIView的区别
1.UIView可以响应事件,Layer不可以.
- UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理。UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。在 UIResponder中定义了处理各种事件和事件传递的接口。
- CALayer直接继承 NSObject,并没有相应的处理事件的接口。
2.View和CALayer的Frame映射
- 一个 Layer 的 frame 是由它的 anchorPoint,position,bounds,和 transform 共同决定的,而一个 View 的 frame 只是简单的返回 Layer的 frame,同样 View 的 center和 bounds 也是返回 Layer 的一些属性。(一会儿解析属性的时候会再做比较)
- 对于frame的理解请看这里
3.UIView主要是对显示内容的管理而 CALayer 主要侧重显示内容的绘制。
4.在做 iOS 动画的时候,修改非 RootLayer的属性(譬如位置、背景色等)会默认产生隐式动画,而修改UIView则不会。
对UIView与CALayer的深入理解,请点击这里
CALayer的基本属性
属性解释:
- position
layer在父视图上的相对坐标:(计算公式)
position.x = frame.origin.x + anchorPoint.x * bounds.size.width; position.y = frame.origin.y + anchorPoint.y * bounds.size.height;
anchorPoint (锚点)
锚点指定的是自身(本Layer)哪个位置出现在父视图的position点
取值范围为[0,1];
可以参考这里更好理解anchorPointCornerRadius(圆角半径)
可以设置四周的圆角,配合maskToBounds = YES;裁切成圆矩形或圆
但是一般裁切圆角我们不这么用,因为特别耗费性能;
4.mask
其实就是一个遮罩,
0 0
- iOS CALayer (图层的相关知识)
- IOS 图层CALayer
- iOS开发 - CALayer图层
- iOS CALayer视图图层
- 关于CALayer层的一些简单知识
- ios-day18-04(图层CALayer的隐式动画)
- 【iOS开发-90】CALayer图层:自定义图层,图层的一些动画
- ios实现CALayer层的动画点击
- ios—CAlayer层的属性
- iOS开发中的图层-CALayer-
- ios-day18-05(自定义图层(CALayer))
- iOS —— CALayer 创建图层
- iOS开发总结之图层CALayer
- CALayer -- 层的属性
- CALayer -- 层的属性
- CAlayer层的属性
- CAlayer层的属性
- CAlayer层的属性
- Struts2中转发和重定向的区别
- 以root用户远程登录Linux报错:Permission denied, please try again.
- 2.1.2
- 进程与线程的一个简单解释
- Java动态代理初探
- iOS CALayer (图层的相关知识)
- 蓝桥杯-回文数
- 史上最简单的 MyBatis 教程(一)
- 橄榄山BIM大学论坛正式启用,有Revit二次开发专版。可去那里问问题 http://bbs.glsbim.com
- Android : Broadcast
- opencv学习之分水岭算法
- 纯css3实现美化复选框和手风琴效果(详细)
- 详解Objective-C的isa与meta-class
- Linux线程API的实际操作笔记