Core Animation:UIView和CALayer

概念:

  • UIView:UIView就是在屏幕上显示的一个矩阵块,具有层级关系,支持相互嵌套。可以处理触摸事件(iOS通过视图层级关系传递触摸事件),可以支持基于Core Graphics绘图,可以做旋转或者缩放等仿射变化,以及一些类似于滑动或者渐变的简单动画。

  • CALayer:CALayer在概念上和UIView相似,同样也是一些被层级关系树管理的矩阵块,同样也可以包含一些内容(像图片、文本或者背景色)。它有一些方法和属性可以用来做动画和交换。它和UIView最大的不同是,它不处理用户的交互。

关系:

每一个UIView都持有一个CALayer实例的图层属性。视图需要创建并管理这个图层。以确保当子视图被添加或者移除时,子视图的图层也对应的从图层树中被添加或者移除。而CALayer才是真正用来在屏幕上显示和处理动画的。UIView仅仅是对它的一个封装,并提供了Core Animation底层方法的高级接口。

iOS不用一个简单的层级处理UIView和CALayer的主要原因是为了将职责分离,这样有利于代码的复用。例如,Mac OS基于鼠标、键盘和iOS基于多点触控在实现上有着本质的区别。但绘图、布局和动画,却是两个平台可以共用的地方。通过分离,就可以让两个平台共享绘图、布局和动画的实现。

示例:

可以往视图中添加子视图,或者往视图所持有的图层,添加子图层。

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10, 40, 300, 300)];
view.backgroundColor = [UIColor greenColor];
[self.view addSubview:view];

CALayer *subLayer = [[CALayer alloc] init];
subLayer.frame = CGRectMake(0, 0, 80, 80);
subLayer.backgroundColor = [UIColor blueColor].CGColor;
[view.layer addSublayer:subLayer];

效果如下图所示:

Core Animation:UIView和CALayer_第1张图片
往视图的图层上增加子图层.JPEG

你可能感兴趣的:(Core Animation:UIView和CALayer)