CoreAnimation 开篇
CoreAnimation系列博客是我对学习CoreAnimation的知识整理,博客排列顺序以及知识讲解存在欠缺望见谅.
博客的编写是在工作之余,尽量保证CoreAnimation系列博客在6月初全部编写完成,感兴趣的同学可以关注一下.
为了保证学习CoreAnimation的质量我会在每个篇幅结束后附上GitHub地址以供查看源码.
CoreAnimation简介
CoreAnimation将其翻译为中文则是"核心动画"(Core:核心,Animation:动画).然而如果单纯的只是介绍动画我想我不会用大规模的篇幅去梳理其概念,api,以及代码实现.
CoreAnimation中的动画只是其一小部分, CoreAnimation实际上是一个复合引擎,它的功能是以其最快的速度组合屏幕上不同的可视内容,这个内容是被分解成独立的图层,存储在一个叫做图层树的体系之中.这个树便是我们在iOS程序上所能看到视图的基础.
图层树
视图与图层
所谓的视图就是我们错看到的内容,它能够拦截类似于鼠标点击或者触摸手势等操作,视图在层级关系中可以互相嵌套,一个视图可以管理它的所有子视图的位置.图层则是视图之间的层级关系,下面两张图就分别是视图与图层.
所在iOS当中,所有的视图都从一个叫做UIVIew
的基类派生而来,UIView
可以处理触摸事件,可以支持基于Core Graphics绘图,可以做仿射变换(例如旋转或者缩放),或者简单的类似于滑动或者渐变的动画.
CALayer
CALayer与UIView的区别和联系我写过一篇博客.
CALayer与UIView的区别和联系
平行的层级关系
每个UIView上都会存在一个CALayer,而实质行UIView的职责也就是控制和管理图层(CALayer),并且响应事件.真正的图形展示以及动画处理都是CALayer去做的.因此UIView是在CALayer上的封装以及添加了响应事件的功能.
图层的能力
在某种意义上说UIView既然是对CALayer的封装,那么我们使用UIView就好了,而且对于一些简单的需求来说,我们确实没必要处理CALayer
,因为苹果已经通过UIView
的高级API间接地使得动画和视图的展现变得很简单.
但是这种简单会不可避免地带来一些灵活上的缺陷.如果你略微想在底层做一些改变,或者使用一些苹果没有在UIView
上实现的接口功能,这时除了介入CoreAnimation底层之外别无选择.
例如下面的功能,我们只能选择CALayer去实现.
- 阴影,圆角,带颜色的边框
- 3D变换
- 非矩形范围
- 透明遮罩
- 多级非线性动画
- 等等
使用图层
下面让我们真正的去使用图层.
- 圆角,带颜色的边框
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UIView *centerView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.centerView.layer.cornerRadius = 10;// 设置图层的圆角半径
self.centerView.layer.borderWidth = 2;// 设置图层的边框宽度
self.centerView.layer.borderColor = [UIColor greenColor].CGColor;// 设置图层的边框颜色
self.centerView.layer.masksToBounds = YES;//暂不理会
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}