CoreAnimation(一):关于图层树(既生瑜,何生亮)

CoreAnimation是一个复合引擎,它的职责就是尽可能快地组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系中,图层树是UIKit以及iOS应用程序中屏幕上所能看见一切的基础。

视图:UIView及其子类

一个视图就是在屏幕上显示的一个矩形块,例如图片、文字或视频。能够拦截处理类似鼠标点击或触摸手势等用户输入。视图在层级关系中可以相互嵌套。父视图可以管理所有子视图的位置。
在iOS中,所有的视图都是从UIView的基类派生出来的UIView可以处理触摸事件;可以支持基于Core Graphics绘图;可以做仿射变换(例如旋转或缩放),或者简单的滑动与渐变动画。

图层:CALayer

CALayer在概念上和UIView类似,同样也是一些被层级关系树管理的矩形块,也可以包含图片、文本、背景色等内容,管理子图层的位置,通过方法或属性做动画和变换。CALayer和UIView最大的不同在于CALayer无法处理用户的交互

CALayer并不清楚具体的响应链(iOS通过视图(UIView)层级关系来传递触摸事件的机制),即使它提供了一些方法用来判断一个触点是否在图层的范围之内。

平行的层级关系:UIView与CALayer

每一个UIView都有一个CALayer实例的图层属性,视图UIView的职责就是创建并管理这个图层CALayer,以确保当子视图在层级关系中添加或者移除的时候,他们关联的图层在对应的层级关系中有相同的操作。
实际上视图关联的图层才是真正用来在屏幕是那个显示和做动画的,UIView仅仅是对它的一个封装,提供一些iOS类似于处理触摸的具体功能以及Core Animation底层方法的高级接口

iOS基于UIView和CALayer提供两个平行的层级关系,主要原因在于做职责分离,更好的兼容 iOS 和 Mac OS 平台,把绘图、布局和动画功能应用到独立的 Core Animation 框架中,在 iOS 和 Mac OS 之间共享代码,实现跨平台。

实际上这里不是两个平行的层级关系,还是四个,另外两个分别是呈现树渲染树

CALayer区别于视图UIView特有的功能如下:

  • 阴影、圆角、带颜色的边框
  • 3D变换
  • 非矩形范围
  • 透明遮罩
  • 多级非线形动画

CALayer的使用场景:

  • 开发跨平台应用时
  • 使用多种CALayer的子类,并且不想创建额外的UIView去封装它们
  • 做一些对性能特别挑剔的工作,比如对UIView一些可忽略不计的操作都会引起显著的不同(这种情况下,甚至想直接使用OpenGL来绘图

那么UIView相比于CALayer有哪些优点呢?主要是UIView提供了一些高级的API,比如自动排版、布局和事件处理。

内容摘录于此

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值