iOS 动画(理论篇)

在一段时间内显示的内容发生变化,这个过程称之为Animation(动画)。Animation作用于图层,图层也提供了接口用于添加Animation。当需要对图层进行Animation或者需要对Animation做出更多自定义行为的时候,就必须用到显示动画。显示动画基类CAAnimation,能用的动画类只有CABasicAnimation、CAKeyframeAnimation、CATransition、CAAnimationGroup。

UIView层动画(+ (void)animateWithDuration:.....)

CALayer层动画(CABasicAnimation,CAKeyframeAnimation)

接下来我会根据简单到复杂的顺序解释如何使用这些动画,注意事项和分析什么时候使用他们。

1.先说简单的UIView层动画

简单哪几种就不说了,介绍下iOS7之后有的弹簧动画.

+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void(^)(void))animations completion:(void(^__nullable)(BOOLfinished))completionNS_AVAILABLE_IOS(7_0);

usingSpringWithDamping:的范围为0.0f到1.0f,数值越小「弹簧」的振动效果越明显。

initialSpringVelocity:则表示初始的速度,数值越大一开始移动越快。

注意事项

1.animateWithDuration虽然是使用block,但是这个block不需要我们对变量弱引用,因为它是类方法。

2.当动画结束的时候最好判断下finishied的状态,因为在程序中当多个View刷新的时候,就可能出现动画异常的现象。

分析什么时候使用

1.动画可能随时被打断的情况最好使用UIView层的动画,因为这个动画是直接更改的View的frame值,我们可以随时的记录到准确的frame值。

2.只执行一次(或者有限几次)的情况下优先使用,因为这个动画每次执行次数的参数。如果想反复执行一种动画,就要使用递归,但是递归在方法释放时很容易出现问题。

代码:https://github.com/YBYHunter/JM_YUAnimation.git

2.CALayer层动画

先上个继承图:

CAAnimation:动画对象的基类 CAAnimationGroup:组合动画 CATransition:转场动画 CAPropertyAnimation:属性动画

常用的动画CABasicAnimation,CAKeyframeAnimation都是继承CAPropertyAnimation.

CABasicAnimation(基础动画)的使用

参考这个:http://www.jianshu.com/p/02c341c748f9就可以了,里面已经写的很详细了。

CAKeyframeAnimation(关键帧动画)的使用

参考:http://www.jianshu.com/p/b05986ded337

注意事项

1.因为修改的是layer层参数,而不是我们平常使用的UIView层数据。所以执行完动画后要注意你的layer坐标是否回归到正常。

2.动画只想执行一次,需要配置removedOnCompletion、fillMode两个属性,要不然动画会自动执行逆动画。

3.关于CABasicAnimation的delegate是strong属性问题。我个人猜测应该是动画过程怕对象销毁了产生代理回调不准确问题。出现的问题就是内存会不断的往上增加。然后解决方案就是声明一个单独的类实现delegate的回调。(详细办法http://www.jianshu.com/p/02c341c748f9)。

4.一个 CABasicAniamtion 的实例对象只是一个数据模型,和他绑定到哪一个layer上是没有关系的 。方法addAnimation:forKey:是将 CABasicAniamtion 对象进行了 copy 操作的。所以在将其添加到一个layer上之后,我们还是将其再次添加到另一个layer上的。

5.解决有时视图会闪动一下的问题,我们可以将layer的属性值设置为我们的动画最后要达到的值,然后再给我们的视图添加layer动画。

分析什么时候使用

1.CABasicAnimation一般反复循环的单一动画使用。

2.CAKeyframeAnimation一般是有多个帧动画的时候使用, 但是每个帧之间是匀速的,或者是一些其他规律变化的时候使用。

全部动画的下载地址:https://github.com/YBYHunter/JM_YUAnimation.git

接下来说下使用贝塞尔曲线画图形和动画。

由于水平有限若发现有问题的地方请评论。

参考:http://www.jianshu.com/p/37b7cece75f6

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT可乐

Java数据结构和算法(六)——前缀、中缀、后缀表达式

  前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆...

1929
来自专栏守候书阁

编写自己的代码库(javascript常用实例的实现与封装)

因为公司最近项目比较忙,没那么多空余的事件写文章了,所以这篇文章晚了几天发布。但是这也没什么关系,不过该来的,总是会来的。 好了,其他的不多说的,大家在开发的时...

772
来自专栏飞扬的花生

JQuery常用方法总结

1.json的创建方式 <script> $(function () { //第一种 var my = new Peop...

1957
来自专栏salesforce零基础学习

salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能

现在做的项目代码是原来其他公司做的,要在原来基础上业务进行适当调整加上一些CR,其中有一个需要调整的需求如下: 原来使用apex:selectCheckboxe...

20410
来自专栏DannyHoo的专栏

字符串(NSString)、字典(NSDictionary)、数组(NSArray)的总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

842
来自专栏灯塔大数据

技术 | Python从零开始系列连载(十二)

导读 为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~ 上一期学习...

37815
来自专栏知道一点点

走进AngularJs(二) ng模板中常用指令的使用方式

  通过使用模板,我们可以把model和controller中的数据组装起来呈现给浏览器,还可以通过数据绑定,实时更新视图,让我们的页面变成动态的。ng的模板真...

812
来自专栏JackieZheng

AngularJS入门心得4——漫谈指令scope

  上篇《AngularJS入门心得3——HTML的左右手指令》初步介绍了指令的概念和作用。已经和指令打过一个照面,就不会那么陌生了,今天主要介绍的是一个困扰了...

1706
来自专栏EAWorld

像踢球一样玩转Redux和React

引言 React的核心是使用组件定义界面的表现,是一个View层的前端库,简单来说它就是一堆前端组件,view,view,view,重要的事情...

2667
来自专栏偏前端工程师的驿站

WebComponent魔法堂:深究Custom Element 之 标准构建

前言  通过《WebComponent魔法堂:深究Custom Element 之 面向痛点编程》,我们明白到其实Custom Element并不是什么新东西,...

17310

扫码关注云+社区