图层的行为在以下情况发生的时候被触发:从图层树里面插入或者删除一个图层,图层的属性值被修改了,或者程序显式要求。通常情况下,行为触发器是动画显示的结果所在。
 
1.1 行为对象的角色
  一个行为对象是一个通过CAAction协议响应行为标识符的对象。行为标识符使用标准圆点分隔的关键路径来命名。图层负责把行为标识符映射到特定的行为对象。当一个特定标识符的行为对象被确定的时候,它会发送一个CAAction协议定义的消息。
  CALayer类提供了默认的CAAnimation的行为对象实例,一个兼容类所有动画层属性CAAction协议。表1中CALayer同样定义了以下没有直接对应到属性的行为触发器和他们的行为标识符。
  Action触发器和相应的标示符:
  (1)一个layer被插入一个可见的layer树,或者layer的hidden属性被设为NO
     kCAOnOrderIn
  (2)一个layer被从一个可见的layer树中移除,或者layer的hidden属性被设为YES
     kCAOnOrderOut
  (3)使用replaceSublayer:with:方法将一个可见树中的layer替换
     kCATransition
 
1.2 已定义搜索模式的行为键值
  当一个行为触发器发生的时候,图层的actionForKey:方法被调用。此方法返回一个行为对象,对应的标识符作为参数,或如果行为对象不存在的话返回nil。
  
  当CALayer为一个标识符实现的actionForKey:方法被调用的时候,以下的搜索模式将会被用到:
  1.如果一个图层有委托,那方法actionForLayer:forKey:的实现将会被调用,把图层和行为标识符作为参数。委托的actionForLayer:forKey:的实现需要响应如下:
  (1)返回一个行为标识符对应的行为对象。
  (2)返回nil,当无法处理行为标识符的时候。
  (3)返回NSNull,当无法处理行为标识符,而且搜索需要被终止的时候。
  2.图层的actions字典被搜索以便找到一个和行为标识符对应的对象。
  3.图层的style属性被搜索以便找到一个包含行为标识符的actions字典。
  4.图层类发生一个defaultActionForKey:的消息。它将会返回一个和标识符对应的行为对象,如果不存在的话则返回nil。
 
1.3 采用CAAction协议
  CAAction协议定义了行为对象如何被调用。实现CAAction协议的类包含一个方法runActionForKey:object:arguments:。
  当行为对象收到一个runActionForKey:object:arguments:的消息时,行为标识符、行为发生所在的图层、额外的参数字典会被作为参数传递给方法。
  通常行为对象是CAAnimation的子类实例,它实现了CAAction协议。然而你也可以返回任何实现了CAAction协议的类对象。当实例收到runActionForKey:object:arguments:的消息时,它需要执行相应的行为。
  当CAAnimation实例受到消息runActionForKey:object:arguments:的时候,它把自己添加到图层的动力里面,触发动画的执行(查看代码1)。
  
  代码 1  runActionForKey:object:arguments: 的实现:启动动画
  - (void)runActionForKey:(NSString *)key object:(id)anObject arguments:(NSDictionary *)dict{
     [(CALayer *)anObject addAnimation:self forKey:key];
  }
 
1.4 重载隐式动画
  你可以为行为标识符提供隐式的动画,通过插入一个CAAnimation的实例到style字典里面的actions的字典里面,通过实现委托方法actionForLayer:forKey:或者继承图层类并重载defaultActionForKey:方法返回一个相应的行为对象。
  代码2的示例通过委托替换contents属性的隐式动画。
  代码 2   contents 属性的隐式动画
  - (id<CAAction>)actionForLayer:(CALayer *)theLayer forKey:(NSString *)theKey{
    CATransition *theAnimation=nil;
    if ([theKey isEqualToString:@"contents"]){
        theAnimation = [[CATransition alloc] init];
        theAnimation.duration = 1.0;
        theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
        theAnimation.type = kCATransitionPush;
        theAnimation.subtype = kCATransitionFromRight;
    }
    return theAnimation;
  }
 
  代码3的示例使用actions字典模式禁用sublayers属性的默认动画。
  代码 3  sublayers 属性的隐式动画
  // get a mutable version of the current actions dictionary
  NSMutableDictionary *customActions=[NSMutableDictionary dictionaryWithDictionary:[theLayer actions]];
  // add the new action for sublayers
  [customActions setObject:[NSNull null] forKey:@"sublayers"];
  // set theLayer actions to the updated dictionary
  theLayer.actions=customActions;
 
1.5 暂时禁用行为
  
  默认情况下,你任何时候改变一个可动画显示的属性时,相应的动画将会伴随发生。
  在修改图层属性的时候,你可以通过使用事务暂时禁用行为。查看“暂时禁用图层的行为”部分来获取更多信息。
转自梦维:http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-layer-g-action.html

CoreAnimation编程指南(七)图层Action相关推荐

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

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

  2. CoreAnimation编程指南(五)图层内容

    当我们使用Cocoa的视图的时候,我们必须继承NSView或者UIView并且重载函数drawRect:来显示任何内容.但是CALayer实例可以直接使用,而无需继承子类.因为CALayer是一个键- ...

  3. CoreAnimation编程指南(四)图层树结构

    图层不但给自己提供可视化的内容和管理动画,而且充当了其他图层的容器类,构建图层层次结构.  本章介绍了图层层次结构,以及如何操纵该图层层次结构.   一.什么是图层树的层次结构 1.图层树是核心动画里 ...

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

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

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

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

  6. CoreAnimation编程指南(简介)

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

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

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

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

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

  9. CoreAnimation编程指南(八)事务

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

最新文章

  1. 【转载】图像缩放与插值理论基础
  2. HDU 2516 取石子游戏 斐波纳契博弈
  3. 数据:BTC全网算力为134.17 EH/s,新增地址数51.05万
  4. c# 声音控制(转载)
  5. 算法笔记_面试题_22. 图与搜索(BFS/DFS)相关_模板及示例十几道
  6. FirstApp,iphone开发学习总结3,UIButton简单的操作
  7. FunCode太空战机C++实现
  8. 推荐一个不错的免费的asp空间
  9. 怎么画出好的架构图,架构师必备!
  10. 数论基础题(1) 费马引理+卡特兰数+Lucas定理+同余方程+扩欧
  11. 微信接龙,查人,查谁没有接龙,工具
  12. 解决vue项目路由出现message: Navigating to current location (XXX) is not allowed的问题
  13. linux的sssd服务,sssd – 刷新ldap客户端配置Centos
  14. 两个均匀分布相加、两个正态分布相加、由均匀分布生成正态分布
  15. 前端、vue、Vue3弹幕实现;前端CSS实现弹幕
  16. Java飞翔的小鸟源码
  17. 什么是stream?
  18. android向节点写入或者读取值
  19. 频谱仪的更改ip_频谱分析系列:三阶交调失真概述及测试
  20. 使用linux中的convert命令修改图片大小

热门文章

  1. k8s 基础概念和术语
  2. C - 思考使用差分简化区间操作
  3. 算法笔记_202:第三届蓝桥杯软件类决赛真题(Java高职)
  4. Nginx 安装与启动
  5. 金山笔试题-字符串排序 : 写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理...
  6. Linux 启/关 自启动服务
  7. 计算机网络学习笔记-1.2.4TCP,IP参考模型和五层参考模型
  8. python pip gpl_python pip怎么更新包
  9. c++求n次方_课时9一元二次方程及其应用
  10. php mysql会员注册_PHP实现会员注册系统