转载

iOS核心动画

动画是iOS中非常有趣的部分,同时也是提升用户交互体验的有力工具,本文主要分为两个部分,第一个部分讲解基础知识,第二个部分列举基本使用

一、基础知识

1.1、动画相关框架

iOS核心动画

从上图可以发现

  • UIView在最上层

  • 往下依次是CoreAnimation

  • CoreGraphics、Hardware

1.2、iOS系统框架

iOS核心动画

上图为iOS中的四层架构

  • UIView位于Cocoa Touch层

  • CoreAnimation位于Media Layer中的QuartzCore框架中,查看QuartzCore的头文件可以发现,只引入了CoreAnimation。CALayer这个熟悉的对象是在CoreAnimation中,CoreAnimation往往作用于CALayer而不是UIView

  • Core Graphics也是在Media Layer层中的框架

1.3、UIView、QuartzCore和CoreGraphics之间的关系

UIView:主要负责事件响应、页面展示和与RunLoop相关操作

QuartzCore:不单负责动画的创建和执行,还会将图形图像最终显示到屏幕上(本质上是CoreAnimation通过OpenGLES来做的)

CoreGraphics:是一个基于C的库函数的高级绘画引擎,负责创建最终显示到屏幕上的数据模型

1.4、UIView和CALayer的协同

  • UIView都拥有一个CALayer,CALayer将UIView设置为了自己的代理对象

  • 对于CALayer对象,改变其属性,都会触发一个简单动画

  • UIView禁止在默认情况下禁止了CALayer的动画,所以我们在改变UIView的属性的时候,不会触发动画,而在UIView的动画block中,我们又能产生动画,在原理上为:一个可动画的CALayer属性改变的时候,都会寻找并运行一个合适的改变,这个改变是CAAction对象,而UIView的CALayer对象会询问他的delegate,即UIView,询问提供一个CAAction对象,delegate可以通过下面三种方式之一进行响应

1、它可以返回一个动作对象,这种情况下 layer 将使用这个动作。
2、它可以返回一个 nil, 这样 layer 就会到其他地方继续寻找。
3、它可以返回一个 NSNull 对象,告诉 layer 这里不需要执行一个动作,搜索也会就此停止。

1.5、UIView和CALayer的关系

  • UIView的属性只是简单地返回了CALayer对象的属性

  • UIView作为CALayer的代理,负责事件处理功能,CALayer负责页面绘制(前面也提到了CoreAnimation的作用)

二、基本使用

2.1、Core Animation类图

iOS核心动画

2.2、类别

我们常用到的为下面四种:

  • CAAnimationGroup:动画组,将不同类型的动画同时进行或者连续进行

  • CABasicAnimation:基本动画,包括一些基本属性的动画,例如位移、缩放、渐变等

  • CAKeyFrameAnimation:关键帧动画,连续进行多个阶段的动画

  • CATransition:过渡动画

除了上面四种,还有一种是iOS9之后提供的弹簧动画CASpringAnimation

另外,CoreGraphics中提供了仿射变化动画,可以很方便地进行一些基本动画操作

正文到此结束
Loading...