CoreAnimation的好处:

1.高性能,简单的编程模块

2.像View一样,使用层级结构来构建负责的界面

3.轻量级数据结构,能使上百个动画同时执行

4.抽象的动画接口,允许动画在一个独立的线程中运行,独立于应用程序的run loop

5.提高应用程序的性能

6.可扩展的布局管理模型

CoreAnimation Class:

1.Layer Class:提供显示内容

2.Animation and timing Class

Layer的许多属性都有隐式的动画效果,改变属性值将会自动产生一个从当前值到新值的动画

显示的动画不会改变Layer的属性,它只负责显示动画

CAAnimation是所有动画类的抽象类,具体类有以下几种

  • CATransition过渡效果
  • CAAnimationGroup多个动画同时执行
  • CAPropertyAnimation抽象类,支持key path
  • CABasicAnimation简单的修改layer的属性
  • CAKeyframeAnimation支持key frame动画

3.Layout and constraint classes

4. Transaction class

CoreAnimation支持2种形式的Transaction:

  • implicit transactions:当layer的属性修改,如果layer thread中没有activity的transaction时,自动创建,在线程的下个run loop中自动的提交
  • Explicit transaction:CATransaction begin时开始,commit时结束

CoreAnimation的渲染结构

layer是MVC中的model对象。它封装几何,时间,可现实属性,和显示的内容。但它并不负责实际的显示。

Layer-Tree包含你设定的属性值

Presentation Tree中的值是当前正在执行动画的属性值

Render-Tree使用Presentation tree中的值,Render-Tree负责实际的渲染操作,独立于应用程序的activity。渲染是在一个独立的进程或线程中执行的。

当动画正在执行时,我们可以通过查询layer的Presentation Tree,通过这我们能够修改当前正在执行的动画

Layer的几何特性和变换

这里需要注意的是layer的bounds属性,bounds的origin用于:当你重写layer的draw方法时,它指定当前图形上下文的origin,修改origin时,代表layer的左下角的坐标改变了,不再是(0,0)了,而变成(origin.x, origin.y),如果在draw方法中从(0,0)开始绘图,此时将只有部分绘图能显示出来,因为你是从layer以外的部分开始绘制的。注意,UIView的origin是在左上角。

有以下几种方式修改layer的CATransform3D:

  • 使用CATransform3D方法
  • 直接修改其数据结构的成员
  • 使用key-value coding和key paths

注意

You can not specify a structure field key path using Objective-C 2.0 properties. This will not work:

myLayer.transform.rotation.x=0;

Instead you must use setValue:forKeyPath: or valueForKeyPath: as shown below:

[myLayer setValue:[NSNumber numberWithInt:0] forKeyPath:@"transform.rotation.x"];

Layer Tree Hierarchy

默认,从Layer Tree中插入或移除layer时,会触发动画:

  • 当layer加到parent layer时,parent layer会触发一个动作(动作标识符为kCAOnOrderIn)
  • 当layer从parent layer移除时,parent layer会触发动作(kCAOnOrderOut)
  • 当replace时,parent layer会触发kCATransition动作

可以禁用这些动画,或者通过标识符来修改这些动画

注意masksToBounds属性,当它设置为YES时,会将子layer超出父layer的部分剪切掉

Providing Layer Content

在UIVew中我们可以子类化或者执行drawRect:方法来显示内容

但在CALayer中可以直接指定其内容,因为CALayer是一个键值编码的容器,我们可以在其中添加任意值,来避免子类化

主要有以下几种方式:

  • 显示的设置contents属性

Animation

开始执行显示动画:   addAnimation:forKey:

结束显示动画:1.动画完成;2.removeAnimationForKey: 3.removeAllAnimations

临时关闭隐式动画:

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue
forKey:kCATransactionDisableActions];
[aLayer removeFromSuperlayer];
[CATransaction commit];

Layer Action

layer action在以下情况下会被触发:添加layer或者移除layer,layer的属性被修改,或者是显示的应用程序请求。

默认情况,触发action时,会产生一个动画效果

ios之CoreAnimation的更多相关文章

  1. iOS开发CoreAnimation解读之三——几种常用Layer的使用解析

    iOS开发CoreAnimation解读之三——几种常用Layer的使用解析 一.CAEmitterLayer 二.CAGradientLayer 三.CAReplicatorLayer 四.CASh ...

  2. iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程

    iOS开发CoreAnimation解读之一——初识CoreAnimation核心动画编程 一.引言 二.初识CoreAnimation 三.锚点对几何属性的影响 四.Layer与View之间的关系 ...

  3. iOS开发CoreAnimation解读之二——对CALayer的分析

    iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二. ...

  4. iOS关于CoreAnimation动画知识总结

    一:UIKit动画 在介绍CoreAnimation动画前先简单介绍一下UIKit动画,大部分简单的动画都可以使用UIKit动画实现,如果想实现更复杂的效果,则需要使用Core Animation了: ...

  5. iOS动画——CoreAnimation

    CoreAnimation在我之前的UIKit动画里面简单的提了一句CoreAnimation动画,其实大家别看它类库名种有个animation,实际上animation在这个库中只占有很小的地位. ...

  6. CALayer的分析

    转载地址:  http://my.oschina.net/u/2340880/blog/536048 iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CAL ...

  7. CAAnimation-CAPropertyAnimation-CABasicAnimation-CAKeyframeAnimation

    参考博客 iOS关于CoreAnimation动画知识总结 http://www.cnblogs.com/wujy/p/5203995.html iOSCoreAnimation动画系列教程(一):C ...

  8. iOS CoreAnimation详解(一) 有关Layer的动画

    以前由于项目需要 也写了一些动画 ,但是知识不系统,很散.这段时间趁着项目完成的空袭,来跟着大神的脚步系统的总结一下iOS中Core Animation的知识点. 原博客地址:http://blog. ...

  9. iOS CoreAnimation 核心动画

    一 介绍 一组非常强大的动画处理API 直接作用在CALAyer上,并非UIView(UIView动画) CoreAnimation是所有动画的父类,但是不能直接使用,应该使用其子类 属性: dura ...

随机推荐

  1. java基本类型和包装类的区别(转)

    int 是基本类型,直接存数值 Integer是类,产生对象时用一个引用指向这个对象 Java把内存划分成两种:一种是栈内存,另一种是堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数 ...

  2. 九度OJ 1081:递推数列 (递归,二分法)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6194 解决:864 题目描述: 给定a0,a1,以及an=p*a(n-1) + q*a(n-2)中的p,q.这里n >= 2. 求第 ...

  3. To discount or not to discount in reinforcement learning: A case study comparing R learning and Q learning

    https://www.cs.cmu.edu/afs/cs/project/jair/pub/volume4/kaelbling96a-html/node26.html [平均-打折奖励] Schwa ...

  4. php总结7——文件函数库、序列化数据、文件包含

    7.1 文件函数库 php用来操作文件的 1) fopen    代开文件或URL 格式:resource fopen(string $filename, string $mode) 'r' 只读方式 ...

  5. Activity设置style透明后与SurfaceView合用引发的无形命案

    近期搞视频通话,SurfaceView是不可缺少的,因为启动视频要载入一些资源,比較耗时.会有1.2s黑屏的现象,为了改善用户体验,我们须要设置Activity的Theme为透明风格(QQ 也是如此) ...

  6. Linux就该这么学--了解Shell脚本

    有人曾经将Shell形容是人与计算机硬件的“翻译官”,Shell作为用户与Linux系统通讯的媒介.自身也定义了各种变量和参数,并提供了诸如循环.分支等高级语言才有的控制结构特性.如何正确的使用这些功 ...

  7. 【html学习整理】meta,img,表格,表单

    meta标签: 作用: 给搜索引擎用 . 告诉浏览器是什么编码 <meta charset="UTF-8"> <meta name="keywords& ...

  8. 【LeetCode】两个有序数组合成一个有序数组

    a = [1,3,5,7,9]b = [2,4,6,8,10]c= [] while len(a) > 0: if len(b) == 0: c.extend(a) break min_num ...

  9. Dubbo之生产者

    环境步骤: 安装Zookeepr启动 创建Maven项目搭建生产者和消费者 安装DubboAdmin平台,实现监控 Dubbo注册中心采用的是Zookeeper.为什么采用Zookeeper呢? Zo ...

  10. matlab之find()函数

    Find 这个函数用处也挺大的,这几天看很多程序都见到这一函数,今天要好好给阐述,了解下这个函数是为了找到矩阵或者是数组,向量中的非零元素.下面一大段英文没耐心看.看看例子就行了. 第一个用法是 nd ...