动画在app开发过程中 大家多多少少都会接触到 而且随着ios7的扁平化风格启用之后 越来越多的app开始尝试加入各种绚丽的动画交互效果以增加app的用户体验(当然 还是以国外的app居多)
有过相关开发经验的同学肯定知道在ios中 动画相关的部分都是基于core animation 但是今天我们不讨论core animation 今天的主角是pop -来自于facebook的动画引擎(其实我不喜欢把pop定义为动画引擎 我愿意称它为函数发生器)
<a href="https://github.com/facebook/pop" target="_blank">官方地址 https://github.com/facebook/pop</a>
官方介绍(翻译版)
pop是一个在ios与os x上通用的极具扩展性的动画引擎 它在基本的静态动画的基础上增加的弹簧动画与衰减动画 使之能创造出更真实更具物理性的交互动画 pop的api可以快速的与现有的objc代码集成并可以作用于任意对象的任意属性 pop是个相当成熟且久经考验的框架 facebook出品的令人惊叹的paper应用中的所有动画和效果即出自pop
pop的神奇之处在于 它是独立与core animation的存在 所以 忘记core animation吧 忘记layer tree吧 迎接一个简单的明天 (lol 开玩笑的~:) 很多地方还是会需要core animation的 不过说不定哪天苹果大发善心 将动画相关的部分向pop借鉴一点也不是不可能的(比如spritekit就借鉴了cocos2d :)
pop默认支持三种动画 但同时也支持自定义动画
popbasicanimation
popspringanimation
popdecayanimation
popcustomanimation //自定义动画
这里我们只讨论前三种(因为自定义动画我也没用过 :) 先来看看官方的示例代码吧
popbasicanimation使用最广泛 提供固定时间间隔的动画(如淡入淡出效果)
其动画效果如下
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SMx0CcvBXLvJHdulWLxETLzATL1EDMy8CXt92Yu4GZkV3bsNmLix2ZuAjeuETbvNmL2FnYph3Nvw1LcpDc0RHaiojIsJye.gif)
可以看到 添加一个动画最少仅需三步
定义一个animation对象 并指定对应的动画属性
设置初始值和默认值(初始值可以不指定 会默认从当前值开始)
添加到想产生动画的对象上
popbasicanimation可配置的属性与默认值为
popbasicanimation提供四种timingfunction(很熟悉 对不对? 就是core animation中那些)
kcamediatimingfunctionlinear
kcamediatimingfunctioneasein
kcamediatimingfunctioneaseout
kcamediatimingfunctioneaseineaseout
其时间函数分别如下
popspringanimation也许是大多数人使用pop的理由 其提供一个类似弹簧一般的动画效果(使用后 app立马就活泼起来了 有木有?!)
popspringanimation可配置的属性与默认值为
注意:popspringanimation是没有duration字段的 其动画持续时间由以上几个参数决定
其时间函数如下
popdecayanimation提供一个过阻尼效果(其实spring是一种欠阻尼效果) 可以实现类似uiscrollview的滑动衰减效果(是的 你可以靠它来自己实现一个uiscrollview)
注意:这里对popdecayanimation设置tovalue是没有意义的 会被忽略(因为目的状态是动态计算得到的)
popdecayanimation可配置的属性与默认值为
注意:popdecayanimation也是没有duration字段的 其动画持续时间由velocity与deceleration决定
接下来我们看一下pop默认支持哪些属性的动画 打开popanimatablepropery.h可以看到如下定义(这些是到目前为止 所支持的属性 随着版本的更新 还在不断的新增中 :)