iOS的Core Animation的一点总结记录

前言

iOS核心动画框架Core Animation,可以从“动画”的两个字上进行理解。何为“动画”?首先,它是一系列的“画”,因此,其包含“画”这个过程,也就是绘图的过程;其次,这些“画”要“动”起来,才能成为“动画”,也就是它要包含“动”的过程。这应该是所有系统实现“动画”的基本过程,iOS也不例外。
从Core Animation的框架组成来看,也确实如此:

CoreAnimation框架组成

“画”也就是绘图

撇开硬件层Graphics Hardware,iOS提供了两个绘图框架:OpenGL ES/OpenGL和Core Grapics。

  1. OpenGL ES/OpenGL : 第三方开源库,这个就不用多说了,是个地球人都知道。
  2. Core Graphic : 是对苹果自己实现的绘图框架Quart 2D的封装,Quart 2D 是一组二维绘图和渲染API,而Core Graphic则是通过这组API实现绘图功能的。需要注意的是,它可以在iOS和Mac OS通用。

Core Animation通过以上两个绘图框架实现了“画”的功能。

“动”串联了“画”

Core Animation是QuartzCore的子集,甚至可以说就是QuartzCore = Core Animation,这点可以通过其头文件看到:

#ifndef QUARTZCORE_H
#define QUARTZCORE_H

#include <QuartzCore/CoreAnimation.h>

#endif /* QUARTZCORE_H */

这里也就解释了一直困扰我的问题:QuartzCore、 Core Animation、Core Graphic 、Quart 2D四者之间的关系。
注意:CoreAnimation也是在iOS和Mac OS上是通用的。

问题总结

1.为什么CA神马神马的,用的时候好多都要“.CGXXXX”呢?

CALayer = [[CALayer alloc] init];
layer.backgroundColor = [UIColor redColor].CGColor;  

首先,CALayer,它是CoreAnimation中的类。前面说CoreAnimation是跨平台的,为了跨平台的特性,它的backgroundColor属性就不能使用UIColor类型了,因为UIKit只能使用于iOS,而CoreGraphics框架是跨平台的,所以CALayer类的backgroundColor属性就使用了CGColor类型。所以使用时在赋值前要先进行转换,将UIKit中的东西转换为CoreGraphics中的类型。
参考 对CoreGraphics和QuartzCore的理解

持续更新中...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本系列文章的重点是关注在总结iOS图形图像的原理和性能优化的常规解决方案。 事先声明,本文绝大多数概念和内容均来源...
    ac3阅读 9,366评论 10 14
  • 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共...
    ch123阅读 5,722评论 0 1
  • 在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源。共...
    wo不懂阅读 5,384评论 3 3
  • 目录: 主要绘图框架介绍 CALayer 绘图 贝塞尔曲线-UIBezierPath CALayer子类 补充:i...
    Ryan___阅读 5,635评论 1 9
  • DesignPatterns OO基础 抽象 封装 多态 继承 面向对象的六大原则 单一职责原则:一个类中应该是一...
    SilenceDut阅读 2,761评论 0 2