Core Animation && Core Graphics && QuartzCore

参考文档:

https://www.jianshu.com/p/7018e61b6ee5

https://limboy.me/tech/2013/06/08/ios-graphic-animation.html

1、Core Animation

Core Animation 包含于 QuartzCore.framwork 中,是一组自由度更大的图形绘制和动画 API,但实现起来也会比 Core Graphics 麻烦一点。iOS 上的 UIKit 和动画效果大部分都是通过 Core Animation 实现的。

Core Animation 是一个既支持iOS,也支持MAC OS 的动画框架,其执行动画是在后台,不会阻塞主线程,同时其作用在CALayer,不是UIView。实际上它也干 Drawing 的活,这就需要CALayer 的帮助

CAAnimation 继承结构

|  - CAAnimation

    |    - CAPropertyAnimation

        |        - CABasicAnimation

            |            - CASpringAnimation

        |        - CAKeyframeAnimation

    |    - CATransition

    | - CAAnimationGroup

CAAnimation: 核心动画的基础类,不能直接使用,负责动画运行时间、速度的控制,本身实现了CAMediaTiming协议。

CAPropertyAnimation: 属性动画的基类(通过属性进行动画设置,注意是可动画属性),不能直接使用。

CABasicAnimation: 基础动画,通过属性修改进行动画参数控制,只有初始状态和结束状态,可以看作是两个关键帧的 CAKeyframeAnimation。

CASpringAnimation:阻尼动画

CAKeyframeAnimation: 关键帧动画,同样是通过属性进行动画参数控制,但是同基础动画不同的是它可以有多个状态控制。

CATransition: 转场动画,通过滤镜进行动画效果设置,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点,UINavigationController 就是通过CATransition 实现了将控制器的视图推入屏幕的动画效果。。

CAAnimationGroup:动画组,动画组是一种组合模式设计,可以通过组合动画组来进行所有动画行为的统一控制,组中的所有动画效果可以并发执行。

1.1 隐式动画

介绍:

由于 CALayer 在设计之初就考虑它的动画操作功能,CALayer 很多属性在修改时都能形成动画效果,这种属性称为“隐式动画属性”(隐式属性动画的本质是这些属性的变动默认隐含了 CABasicAnimation 动画实现)。

修改属性产生隐式动画:

 但是对于 UIView 的根图层(Root CALayer)而言属性的修改并不形成动画效果,因为很多情况下根图层更多的充当容器的做用,如果它的属性变动形成动画效果会直接影响子图层。

对于非根图层,设置图层的可动画(Animatable)属性(在动画结束后重新设置了 position,而 position 是可动画属性)会产生默认的隐式动画。解决这个问题有两种办法:关闭图层隐式动画、设置动画图层为根图层。

关闭隐式动画:

要关闭隐式动画需要用到动画事务 CATransaction:

CATransaction 是 Core Animation 里负责协调多个动画更新显示操作,保证多个动画同时进行,用于配置隐式动画,即 CALayer 属性修改依赖 CATransaction.

和动画类似 CATransaction 也分为隐式事务和显式事务

隐式事务:在某次 RunLoop 中设置了一个“Animatable”属性,如果当前没有设置事务,则会自动创建一个CATransaction,并在当前线程的下一个 RunLoop 中 commit 这个 CATransaction

显式事务:直接调用 CATransaction 的 [CATransaction begin],[CATransaction commit] 等相关方法。

另外事务可以嵌套,当事务嵌套时候,只有最外层的事务 commit 了之后,整个动画才会执行。

在事务内将隐式动画关闭

1.2 显式动画

显式动画需要在代码中使用 Core Animation 创建一个动画对象,并设置开始和结束值,直到把动画应用到某图层上,进而开始执行的动画。

几种常用的 Layer:

CAEmitterLayer:是CoreAnimation框架中的粒子发射层,可以做出火焰等效果。

CAGradientLayer:是用于色彩梯度展示的layer图层,通过CAGradientLayer,我们可以很轻松的创建出有过渡效果的色彩图

CAReplocatorLayer:是拷贝视图容器,我们可以通过它,将其中的子layer进行拷贝,并进行一些差异处理

CAShapeLayer:是图形layer层,我们可以自定义这个层的形状

CATextLayer:可以进行文本的绘制

CALayer 层级:

1、图层树:包含每一层的对象模型值。他们就是你设定的图层的属性值

2、呈现树:包含了当前动画发生时候将要显示的值(例如你要给图层背景颜色设置新的值的时候,它会立即修改图层树里面相应的值。但是在呈现树里面背景颜色值在将要显示给用户的时候才被更新为新值)

3、渲染树:在渲染图层的时候使用呈现树的值 (渲染树负责执行独立于应用活动的复杂操作。渲染由一个单独的进程或线程来执行,使其对应用程序的运行循环影响最小)

2、Core Graphics

Core Graphics 是一组用来绘制 2D 图形的 API,使用 CPU 进行计算。 新建一个项目时,模板已经自动载入了 CoreGraphics.framwork 。

它是 iOS 的核心图形库,包含 Quartz2D 绘图 API 接口, 常用的是 point,size,rect 等这些图形,都定义在这个框架中,类名以 CG 开头的都属于 CoreGraphics 框架,它提供的都是 C 语言函数接口,是可以在 iOS 和 mac OS 通用的。

并且 CoreAnimation 中大量使用到 CoreGraphics 中的类,因为实现动画要用到图形库中的定义的属性。

3、QuartzCore

QuartzCore 是位于 Mac OS X 的 Drawin 核心之上的绘图层(包含CoreAnimation),是 iOS 系统的基本渲染框架,基于 CoreGraphics 的 OC 语言封装,封装出了基本渲染类 CALayer。

QuartzCore 在 iPhone OS 上的 framework为:

附:

iOS 与图形图像处理相关的框架

1)界面图形框架-- UIKit

2)核心动画框架-- Core Animation

3)苹果封装的图形框架-- Core Graphics & Quartz 2D

4)传统跨平台图形框架-- OpenGL ES

5)苹果最新力推的图形框架 -- Metal

6)用于图像、视频处理的API,如添加滤镜之类的。-- Core Image 

7)适合视频的第三方滤镜方案-- GPUImage

8)游戏引擎-- Scene Kit(3D)和Sprite Kit(2D)

9)计算机视觉在iOS的应用-- OpenCV for iOS

各个框架之间的关系:

图像渲染流程:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容