http://www.dreamingwish.com/dream-2012/coreanimation-programming-guide-f-animation.html

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

本章提供了对动画类的概览,和介绍如何创建隐式的和显式的动画。

1.1 动画类和时序

核心动画提供了一套你可以在你应用程序里面使用的动画类的表现:

  • CABasicAnimation提供了在图层的属性值间简单的插入。
  • CAKeyframeAnimation提供支持关键帧动画。你指定动画的一个图层属性的关键路径,一个表示在动画的每个阶段的价值的数组,还有一个关键帧时间的数组和时间函数。
  • CATransition提供了一个影响整个图层的内容过渡效果。在动画显示过程中采用淡出(fade)、推出(push)、显露(reveal)图层的内容。 常用的过渡效果可以通过提供你自己定制的核心图像滤镜来扩展。

除了要指定显示的动画类型,你还必须指定动画的间隔、它的速度(它的插值如何分布在整个动画过程)、动画循环时候的循环次数、动画周期完成的时候是否自动的反转、还有动画结束的时候它的可视化状态。动画类和CAMediaTiming协议提供所有这些功能甚至更多的功能。

CAAnimation、它的子类、时序协议被核心动画和Cocoa Animation Proxy功能共享。这些类将会在“动画类型和时序编程指南(Animation Types and Timing Programming Guide)”里面详细介绍。

1.2 隐式动画

核心动画的隐式动画模型假定所有动画图层属性的变化应该是渐进的和异步的。动态的动画场景可以在没有显式的动画图层时候实现。改变可动画显示的图层的属性将会导致图层隐式把图层从旧的值动画显示为新的值。虽然动画是持续的,但是设置新的目标值时会导致图层从当前状态动画过渡到新的目标值。

代码1显示了如果简单的触发一个隐式的动画,把图层从当前位置动画改变到新的位置。

代码 1  隐式的动画改变图层的position属性

//假设layer当前position为(100.0,100.0)
theLayer.position=CGPointMake(500.0,500.0);

你可以隐式的一次动画改变图层的一个或者多个属性。你还可以隐式的同时动画改变多个图层。代码2的代码实现了4个同时触发的隐式动画。

代码 2  隐式的同时动画改变多个图层的多个属性

// 在移动至远处时将Layer的opacity属性渐进至0
theLayer.opacity=0.0;
theLayer.zPosition=-100;//在移动至近处时将Layer的opacity属性渐进至1
anotherLayer.opacity=1.0;
anotherLayer.zPosition=100.0;  

隐式动画使用动画属性中默认指定的动画时间,除非该时间已经被隐式或者显式的修改过。阅读“重载覆盖隐式动画时间”获取更多详情。

1.3 显式动画

核心动画同时提供了一个显式的动画模型。该显式动画模型需要你创建一个动画对象,并设置开始和结束的值。显式动画不会开始执行,直到你把该动画应用到某个图层上面。代码3中的代码片段创建了一个显式动画,它实现一个层的不透明度从完全不透明过渡到完全透明的,3秒后返回重新执行。动画没有开始,直到它被添加到某一图层层。

代码 3  显式动画

CABasicAnimation *theAnimation;theAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
theAnimation.duration=3.0;
theAnimation.repeatCount=2;
theAnimation.autoreverses=YES;
theAnimation.fromValue=[NSNumber numberWithFloat:1.0];
theAnimation.toValue=[NSNumber numberWithFloat:0.0];
[theLayer addAnimation:theAnimation forKey:@"animateOpacity"];

显式动画对于创建连续执行的动画非常有帮助。代码4显示了如何创建一个显式动画,把一个CoreImage滤镜应用到图层上面,动画显示其强度。这将导致“选择的图层”跳动,吸引用户的注意力。

代码 4  连续显式动画示例

// The selection layer will pulse continuously.
// This is accomplished by setting a bloom filter(梦维:用5.0和5.1模拟器测试发现CIBloom这个名称无法初始化滤镜,返回值为nil) on the layer
// create the filter and set its default values
CIFilter *filter = [CIFilter filterWithName:@"CIBloom"];
[filter setDefaults];
[filter setValue:[NSNumber numberWithFloat:5.0] forKey:@"inputRadius"];// name the filter so we can use the keypath to animate the inputIntensity
// attribute of the filter
[filter setName:@"pulseFilter"];// set the filter to the selection layer's filters
[selectionLayer setFilters:[NSArray arrayWithObject:filter]];// create the animation that will handle the pulsing.
CABasicAnimation* pulseAnimation = [CABasicAnimation animation];// the attribute we want to animate is the inputIntensity
// of the pulseFilter
pulseAnimation.keyPath = @"filters.pulseFilter.inputIntensity";// we want it to animate from the value 0 to 1
pulseAnimation.fromValue = [NSNumber numberWithFloat: 0.0];
pulseAnimation.toValue = [NSNumber numberWithFloat: 1.5];// over a one second duration, and run an infinite
// number of times
pulseAnimation.duration = 1.0;
pulseAnimation.repeatCount = HUGE_VALF;// we want it to fade on, and fade off, so it needs to
// automatically autoreverse.. this causes the intensity
// input to go from 0 to 1 to 0
pulseAnimation.autoreverses = YES;// use a timing curve of easy in, easy out..
pulseAnimation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];// add the animation to the selection layer. This causes
// it to begin animating. We'll use pulseAnimation as the
// animation key name
[selectionLayer addAnimation:pulseAnimation forKey:@"pulseAnimation"];

1.4 开始和结束显式动画

你可以发送addAnimation:forKey:消息给目标图层来开始一个显式动画,把动画和标识符作为参数。一旦把动画添加到目标图层,动画将会一直执行直到动画完成,或者动画被从图层上面移除。把动画添加到图层时添加的标识符,同样也可以在停止动画的时候使用,通过调用removeAnimationForKey:。你可以通过给图层发送一个removeAllAnimations消息来停止图层所有的动画。

转载于:https://www.cnblogs.com/kiao295338444/articles/2607372.html

CoreAnimation编程指南(六)动画 转自:http://www.dreamingwish.com/相关推荐

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

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

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

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

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

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

  4. CoreAnimation编程指南(简介)

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

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

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

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

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

  7. CoreAnimation编程指南(三)几何变换

    本章介绍图层的几何组成部分,及他们之间的相互关,同时介绍如何变换矩阵可以产生复杂的视觉效果. 一.图层的坐标系 1.图层的坐标系在不同平台上面具有差异性.在iOS系统中,默认的坐标系统原点在图层的中心 ...

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

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

  9. CoreAnimation编程指南(十)KVC

    CAAnimation和CALayer类扩展了NSKeyValueCoding协议,给键添加默认值,扩展了封装协议,支持CGPoint.CGRect.CGSize和CATransform3D关键路径. ...

最新文章

  1. 刷新UITableView
  2. 报名即将截止,中国移动“梧桐杯”大数据应用创新大赛,寻找大数据敢想者!...
  3. 在android工程中,res目录下又有anim、drawable、layout、menu、raw、values和xml文件夹,分别用来保存?...
  4. 判断一个整数是否是水仙花数 || 编写程序,根据输入的月份和年份,求出该月的天数(1-12)|| 运算符的优先级问题 ||输出小写的a-z以及大写的Z—A||求出1-1/2+1/3-1/4…..1/
  5. 图像工程之图像处理 CH1绪论
  6. 牛客练习赛 57——manacher算法 树形dp?
  7. 谈谈iOS获取调用链
  8. numpy matrix 矩阵对象
  9. C# 获取当前程序集版本号,获取当前编译时间
  10. Js字符串与十六进制的相互转换 【转】
  11. mysql查询字段为null的方法
  12. 基于机器学习的DGA域名检测
  13. ubantu下安装redis
  14. HTTP的请求方法OPTIONS
  15. 1.7亿条数据,比胡同和撸串更真实的北京
  16. 香港常见问题扫盲贴(港币兑换/签注直飞/刷卡/酒店押金/关税/香港上网)
  17. VB.NET读取Excel数据在CAD上展图
  18. 栈展开(stack unwinding)在destructors中的exceptions
  19. 【架构师实践课】微服务如何拆分?大型微服务项目从何下手?
  20. 前端推荐的学习资源网站

热门文章

  1. php快速排序法远离,php快速排序原理与实现方法分析
  2. Java中基本数据类型和Object之间的关系
  3. 028_vue路由嵌套
  4. 069_html统一资源定位器
  5. 苹果8如何设置锁屏无线网连接服务器,iPhone8屏幕解锁怎么设置?苹果iPhone8与8 Plus解锁四种方法...
  6. java css是什么_Java 之 CSS
  7. igmpproxy_Linux IGMP PROXY 学习笔记 之二 igmp proxy的处理流程分析
  8. 百一测评mysql数据库答案_MySQL练习题,百炼成神~
  9. namespace命名空间的理解C++
  10. 如何设置电脑锁屏时间_电脑如何设置多屏显示?多屏显示的设置方法