动画库?太小看它了
Core Animation(核心动画)并不仅仅是动画,它其实最早的框架名字叫 Layer Kit(层开发包)。
Core Animation 的工作内容是所有屏幕上可见的内容,这些可视化的内容的组织的形式就是一棵 layer tree(层树)。
view 和 layer 一样吗
layer 是处理所有屏幕显示相关的工作的, 而 view 在这点上,只是 layer的一个wrapper,内部还是layer在帮你干。除此之外,view 还包括了一些响应链来处理事件,如触摸等,而 layer 对此毫无兴趣。
这样的设计,可以使得库开发者只需要在ios和mac上在view上做修改即可,如此, ios上是 uiview 体系,而mac上是 nsview 体系,而layer层却都是 core animation 的。另一方面,使用者在处理 ios 和 mac 跨平台的时候,layer 层可以几乎不用修改就可以在两个平台上获得相同的效果。所以在需要款平台(ios和mac)的时候,多多使用 layer 而非 view 来处理显示的内容吧。
iOS 上一个view创建后,通常会内部连带创建一个默认的 layer。而 mac 上一个你需要自己创建 layer。
虽然 view 作为一个 layer 的 wrapper,但是一些功能还是必须直接操作 layer, 如下面这些功能在 view 上并没有提供接口:
- 阴影,圆角,边框颜色
- 3D的变换
- 非矩形的边框
- 透明遮罩
- 多级非线性动画
layer 在代码中就是一个 CALayer.
layer 和 view 一样,可以内部添加孩子。它们在设计上是一个并行的继承树,当你一个 view 被添加或移除的时候,其对应的 layer 会在layer的树中也会相应的添加或移除。
其实内部拥有四个并行的继承树,除了 view 树, layer树, 另外两个是 表示树 和 显示树。
使用 layer
添加 QuartzCore 框架,并引用头文件 <QuartzCore/QuartzCore.h>