CoreAnimation编程指南(七)图层Action

图层的行为在以下情况发生的时候被触发:从图层树里面插入或者删除一个图层,图层的属性值被修改了,或者程序显式要求。通常情况下,行为触发器是动画显示的结果所在。
 
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现搜索之二分查找

搜索 搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的&#xff0c;因为该项目是否存在。 搜索的几种常见方法&#xff1a;顺序查找、二分法查找、二叉树查找、哈希查找 二分法查找 二分查找又称折半查找&#xff0c;优点是比较次数少&#x…

CoreAnimation编程指南(八)事务

图层的每个改变都是事务的一部分。CATransaction是核心动画类&#xff0c;它负责成批的把多个图层树的修改作为一个原子更新到渲染树。本章介绍了核心动画支持的两种事务。隐式事务和显式事务。1.1 隐式事务当图层树被没有获得事务的线程修改的时候将会自动创建隐式事务&#x…

写SQL语句需要注意的点

先回忆一下DDL和DML 创建表DDL create table t_xx(id int auto_increment primary key, name char(10),...) create table t_student( id int auto_increment primary key , name char(10), 外键id int, foreign key(外键id) references 外表t_class(外表id字段名) );插入数…

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

NSView提供了经典的“stuts and springs”模式&#xff0c;用于视图调整大小的时候把关联到它父图层的视图重新调整位置。图层支持该模式&#xff0c;而且Mac OS X上面的核心动画提供了一个更通用的布局管理器机制&#xff0c;允许开发者自己写他们自己的布局管理器。可以为图层…

数据库优化、数据库基础等常用知识点总结

建表优化 1&#xff09;数据库范式 第一范式&#xff08;1NF&#xff09;&#xff1a;强调的是列的原子性&#xff0c;即列不能够再分成其他几列。 如电话列可进行拆分—家庭电话、公司电话第二范式&#xff08;2NF&#xff09;&#xff1a;首先是 1NF&#xff0c;另外包含两…

CoreAnimation编程指南(十)KVC

CAAnimation和CALayer类扩展了NSKeyValueCoding协议&#xff0c;给键添加默认值&#xff0c;扩展了封装协议&#xff0c;支持CGPoint、CGRect、CGSize和CATransform3D关键路径。1.1 键-值编码兼容的容器类CALayer和CAAnimation都是键-值编码兼容的容器类&#xff0c;允许你修改…

CoreImage使用介绍

一、概述CoreImage.framework从iOS5开始启用&#xff0c;它使我们很容易就能处理图片的各种效果&#xff0c;色彩&#xff0c;曝光&#xff0c;饱和度&#xff0c;变形等等。不仅功能强大&#xff0c;而且可以直接使用GPU&#xff0c;效率很高&#xff0c;甚至可以实时的对视频…

一片文章概括大部分python面试基础常考题(部分有详解)

本片文章部分参考地址&#xff1a;https://segmentfault.com/a/1190000018737045 python是动态解释性的强类型定义语言 强类型&#xff1a;不允许不同类型相加。例如&#xff1a;整形字符串会报类型错误。 动态&#xff1a;不使用显示数据类型声明&#xff0c;且确定一个变量…

AssetsLibrary使用介绍

一、概述AssetsLibrary框架&#xff1a;从iOS4.0开始提供&#xff0c;可以通过它获取设备里的图片和视频等资料&#xff0c;以API的方式提供&#xff0c;而且界面式的&#xff0c;比UIImagePickerViewController灵活很多。既可以读又可以写。二、读取资料库中的全部资料1.大概步…

Objective-C成员变量声明方式探究

一、interface和 property 方式声明变量的区别1.你可以单独在interface中定义变量&#xff0c;而不用property定义&#xff1b;也可以只用property去定义&#xff0c;而不在interface中定义&#xff0c;当然用了property去定义&#xff0c;一般要在.m文件中用synthsize去合成相…

web处理高并发措施

高并发处理的思路&#xff0c;从几个方面进行解决 先来了解几个名词 QPS: 每秒处理的请求数量&#xff01; 响应时间: 处理一个请求需要的时间&#xff01; 吞吐量: 单位时间内的处理请求数量&#xff01; 最大并发数: 同一时间能支持的最大请求数&#xff01; 1、流量处…

经典逻辑编程题(本文用python实现)

在一个二维数组中&#xff08;每个一维数组的长度相同&#xff09;&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 思…

@interface使用详解

1.interface可以实现三种功能&#xff1a;(1)声明类:Class(2)声明类别:Category(3)声明扩展:Extension2.声明类&#xff1a;这个就比较常用了&#xff0c;在这里不多说。代码&#xff1a;interface SomeClass : NSObject <SomeDelegate>{}end3.声明类别&#xff1a;(1)类…

同一账号多处登录问题

思路 用户每次登录时生存一个随机字符串保存在服务器和客户端&#xff0c;用户每次访问验证这个字符串&#xff0c;不通过时则要求用户下线&#xff0c; 如果有两个用户先后分别登录同一个帐号&#xff0c;则后登录的那位产生的字符串必然会覆盖先登录的那位&#xff0c; 然后…

iOS中HTTP请求使用cookie

一、iOS中Http请求对cookie的默认处理&#xff1a;1.一直以为ios的http请求不会自动处理请求中的cookie&#xff0c;所以一直认为客户端请求默认是没有Session的&#xff0c;现在发现自己的想法错了很久。2.NSURLRequest默认的处理过程&#xff1a;类似于服务器端和网页端的ses…

python基础题

import functools from decimal import Decimal 字符串反转 import timea hello b functools.reduce(lambda x,y:yx,a) print(b) print(type(b))c .join(list(a)[::-1]) print(c)查找字符串 str_1我爱你中国 char_1中国 nPosstr_1.index(char_1) print(nPos)数组合并去重排…

[Cordova]JS和Native交互实现关键代码(iOS)

一、JS中定义的exec函数&#xff1a;define("cordova/exec", function(require, exports, module) 。关键实现代码如下&#xff1a;1.建立command对象&#xff0c;并且将命令推入commandQueuevar command [callbackId, service, action, actionArgs];commandQueue.p…

win10专业版激活方法——亲测可行!!!

转自:https://blog.csdn.net/AinUser/article/details/79247841 1.首先在桌面左下角的“cortana”搜索框中输入“CMD”&#xff0c;待出现“命令提示符”工具时&#xff0c;右击选择“以管理员身份”运行。 2.此时将“以管理员身份”打开“MSDOS”窗口&#xff0c;在此界面中&…

CoreData简介

一、概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是&#xff1a;SQLite数据库&#xff0c;XML&#xff0c;二进制&#xff0c;内存里&#xff0c;或自定义数据类型 3.好处&#xff1a;能够合理管理内存&#xff0c;避免使用sql的麻烦&#xff0c;高效…

synthesize和dynamic

在声明property属性后&#xff0c;有2种实现选择一、synthesize编译器期间&#xff0c;让编译器自动生成getter/setter方法。当有自定义的存或取方法时&#xff0c;自定义会屏蔽自动生成该方法.二、dynamic告诉编译器&#xff0c;不自动生成getter/setter方法&#xff0c;避免编…