图层的每个改变都是事务的一部分。CATransaction是核心动画类,它负责成批的把多个图层树的修改作为一个原子更新到渲染树。
本章介绍了核心动画支持的两种事务。隐式事务和显式事务。
 
1.1 隐式事务
  当图层树被没有获得事务的线程修改的时候将会自动创建隐式事务,当线程的运行循环(run-loop)执行下次迭代的时候将会自动提交事务。
  代码1的示例修改图层的opacity,zPosition和position数字,依赖隐式事务来确保动画同时一起发生。
  代码 1  隐式事务动画
  theLayer.opacity=0.0;
  theLayer.zPosition=-200;
  thelayer.position=CGPointMake(0.0,0.0);
 
  重要:当在一个没有运行循环(runloop)的线程修改图层的属性的时候,你必须使用显式的事务。
 
1.2 显式事务
  在你修改图层树之前,可以通过给CATransaction类发送一个begin消息来创建一个显式事务,修改完成之后发送comit消息。显式事务在同时设置多个图层的属性的时候(例如当布局多个图层的时候),临时禁用图层的行为,或者临时修改动画的时间的时候非常有用。
1.2.1 临时禁用图层的action
  你可以在修改图层属性值的时候通过设置事务的kCATransactionDisableActions值为YES来暂时禁用图层的行为。在事务范围所作的任何更改也不会因此而发生的动画。代码2显示了一个示例,当把aLayer从可视化图层树移除的时候禁用淡出动画。
  代码 2  临时禁用 layer的action
  [CATransaction begin];
  [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
  [aLayer removeFromSuperlayer];
  [CATransaction commit];
 
1.2.2 重载隐式动画的时间
  你可以暂时改变响应改变图层属性的动画的时间,通过设置事务的kCATransactionAnimationDuration键的值为新的时间。事务范围内所产生的任何动画都会使用该新设置的时间值而不是他们原有的值。代码3显示了一个示例,把动画的发生时间改为10秒而不是zPosition和opacity所指定的动画的默认时间。
  代码 3  重写动画持续时间
  [CATransaction begin];
  [CATransaction setValue:[NSNumber numberWithFloat:10.0f] forKey:kCATransactionAnimationDuration];
  theLayer.zPosition=200.0;
  theLayer.opacity=0.0;
  [CATransaction commit];
 
  即使上面的示例中显示了begin和commit所包围的显式事务的时间,你也可以忽略这些而采用隐式事务来替代。
 
1.2.3 事务的嵌套
  显式事务可以被嵌套,允许你禁用部分动画的行为或者在属性被修改的时候产生的动画使用不同的时间。仅当最外层的事务被提交的时候,动画才会发生。
  
  代码4 中显示了一个嵌套两个事务的例子。最外层的事务设置隐式动画的时间为2秒,并设置图层的position属性值。内层的事务设置隐式动画的时间为5秒,并修改图层的opacity和zPosition属性值。
  
  代码4 嵌套的显式事务
  [CATransaction begin]; // outer transaction
  
  // change the animation duration to 2 seconds
  [CATransaction setValue:[NSNumber numberWithFloat:2.0f] forKey:kCATransactionAnimationDuration];
  
  // move the layer to a new position
  theLayer.position = CGPointMake(0.0,0.0);
  [CATransaction begin]; // inner transaction
  
  // change the animation duration to 5 seconds
  [CATransaction setValue:[NSNumber numberWithFloat:5.0f] forKey:kCATransactionAnimationDuration];
 
  // change the zPosition and opacity
  theLayer.zPosition=200.0;
  theLayer.opacity=0.0;
 
  [CATransaction commit]; // inner transaction
 
  [CATransaction commit]; // outer transaction

转自梦维:http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-vii-matters.html

CoreAnimation编程指南(八)事务相关推荐

  1. CoreAnimation编程指南(八)事务 转自:http://www.dreamingwish.com/

    图层的每个改变都是事务的一部分.CATransaction是核心动画类,它负责成批的把多个图层树的修改作为一个原子更新到渲染树. 本章介绍了核心动画支持的两种事务.隐式事务和显式事务. 1.1 隐式事 ...

  2. CoreAnimation编程指南(简介)

    一.核心动画编程介绍    1.本文档介绍了在使用核心动画时所涉及的基本概念.核心动画的是Objective – C的框架,它通过简单的动画编程接口来提供一套高性能的动画引擎.    2.你应该阅读此 ...

  3. CoreAnimation编程指南(简介)转自:http://www.dreamingwish.com/

    核心动画编程介绍 本文档介绍了在使用核心动画时所涉及的基本概念.核心动画的是Objective – C的框架,它通过简单的动画编程接口来提供一套高性能的动画引擎. 你应该阅读此文档来理解Cocoa应用 ...

  4. iOS之有关动画的总结/CoreAnimation编程指南、简单动画实例

    facebook的动画框架pop:https://github.com/facebook/pop or 核心动画类有以下分类: 提供显示内容的图层类. 动画和计时类. 布局和约束类. 事务类,在原子更 ...

  5. CoreAnimation编程指南(六)动画 转自:http://www.dreamingwish.com/

    http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-f-animation.html 动画是当今用户界面的关键 ...

  6. CoreAnimation编程指南(九)图层布局

    NSView提供了经典的"stuts and springs"模式,用于视图调整大小的时候把关联到它父图层的视图重新调整位置.图层支持该模式,而且Mac OS X上面的核心动画提供 ...

  7. CoreAnimation编程指南(六)动画

        动画是当今用户界面的关键因素.当使用核心动画的时候,动画是自动完成的.没有动画的循环和计数器.你的应用程序不负负责重绘,也不负责跟踪动画的当前状态.动画在独立线程里面自动执行,没有和你的应用程 ...

  8. CoreAnimation编程指南(一)概念

    一.概述 1.核心动画是一套包含图形绘制,投影,动画的Objective–C类集合.它通过开发人员所熟悉的应用程序套件和Cocoa Touch视图架构的抽象分层模式,同时使用先进的合作效果提供了一套流 ...

  9. CoreAnimation编程指南(七)图层Action

    图层的行为在以下情况发生的时候被触发:从图层树里面插入或者删除一个图层,图层的属性值被修改了,或者程序显式要求.通常情况下,行为触发器是动画显示的结果所在.   1.1 行为对象的角色   一个行为对 ...

最新文章

  1. 《数据科学家养成手册》第九章信息论
  2. linux awk 多分隔符
  3. ELK之ElasticSearch快速入门
  4. 大数据能否力挽国足败落狂澜?
  5. python-递归函数
  6. CMakeLists写法总结
  7. 18650锂电池知识全解析
  8. 移植Linux-3.4.2过程学习笔记1——串口打印乱码问题
  9. 线程休眠 java_Java线程休眠和线程让步
  10. web期末作业网页设计——JavaScript
  11. 图数据库 gStore 1.0 版本正式发布
  12. Andorid实例,淘宝评分条,星级评分条应用
  13. android毛玻璃效果,模糊视图工具类!类 高斯模糊
  14. uboot配置早期debug uart
  15. jq创建元素并设置css样式,JQuery为元素添加样式的实现方法
  16. sads以后明天撒谎打算
  17. 帝国时代 游戏是如何开发的_开发人员是新的王国建设者
  18. windows桌面出现无名空白文件
  19. go 调用faiss服务
  20. 物联网无线短距离ZigBee技术详解

热门文章

  1. ElasicSearch(3) 安装elasticsearch-head
  2. Discuz网警过滤关键词库
  3. thinkPHP-空操作
  4. 基于opencv的gpu与cpu对比程序,代码来自opencv的文档中
  5. 创建featureclass,为它赋别名,并移动到数据集下
  6. 【分享】关于对象关系映射的理解
  7. FastReport v3.2.5在BDS2006中的安装方法
  8. mybatis学习笔记-01什么是mybatis
  9. java ant war包_java利用Ant脚本生成war包全过程
  10. js与c语言效率_JavaScript比c语言的性能差了多少?