标签:
动画在APP开发过程中 大家多多少少都会接触到 而且随着ios7的扁平化风格启用之后 越来越多的APP开始尝试加入各种绚丽的动画交互效果以增加APP的用户体验(当然 还是以国外的APP居多)
有过相关开发经验的同学肯定知道在iOS中 动画相关的部分都是基于Core Animation 但是今天我们不讨论Core Animation 今天的主角是POP -来自于Facebook的动画引擎(其实我不喜欢把POP定义为动画引擎 我愿意称它为函数发生器)
官方地址 https://github.com/facebook/pop
官方介绍(翻译版)
POP是一个在iOS与OS X上通用的极具扩展性的动画引擎 它在基本的静态动画的基础上增加的弹簧动画与衰减动画 使之能创造出更真实更具物理性的交互动画 POP的API可以快速的与现有的ObjC代码集成并可以作用于任意对象的任意属性
POP是个相当成熟且久经考验的框架 Facebook出品的令人惊叹的Paper应用中的所有动画和效果即出自POP
安装方式还是推荐使用CocoaPod
1
|
pod ‘pop‘, ‘~> 1.0‘
|
POP的神奇之处在于 它是独立与Core Animation的存在 所以 忘记Core Animation吧 忘记Layer Tree吧 迎接一个简单的明天 (LOL 开玩笑的~:) 很多地方还是会需要Core Animation的 不过说不定哪天苹果大发善心 将动画相关的部分向POP借鉴一点也不是不可能的(比如SpriteKit就借鉴了Cocos2D :)
POP默认支持三种动画 但同时也支持自定义动画
这里我们只讨论前三种(因为自定义动画我也没用过 :) 先来看看官方的示例代码吧
1
|
//Basic animations can be used to interpolate values over a specified time period. To use an ease-in ease-out animation to animate a view‘s alpha from 0.0 to 1.0 over the default duration:
|
POPBasicAnimation使用最广泛 提供固定时间间隔的动画(如淡入淡出效果)
1
|
POPBasicAnimation *anBasic = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPositionX];
|
可以看到 添加一个动画最少仅需三步
POPBasicAnimation可配置的属性与默认值为
1
|
duration:0.4 //动画间隔
|
POPBasicAnimation提供四种timingfunction(很熟悉 对不对? 就是Core Animation中那些)
其时间函数分别如下
POPSpringAnimation也许是大多数人使用POP的理由 其提供一个类似弹簧一般的动画效果(使用后 APP立马就活泼起来了 有木有?!)
1
|
POPSpringAnimation *anSpring = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
|
POPSpringAnimation可配置的属性与默认值为
1
|
springBounciness:4.0 //[0-20] 弹力 越大则震动幅度越大
|
注意:POPSpringAnimation是没有duration字段的 其动画持续时间由以上几个参数决定
POPDecayAnimation提供一个过阻尼效果(其实Spring是一种欠阻尼效果) 可以实现类似UIScrollView的滑动衰减效果(是的 你可以靠它来自己实现一个UIScrollView)
1
|
POPDecayAnimation *anDecay = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
|
注意:这里对POPDecayAnimation设置toValue是没有意义的 会被忽略(因为目的状态是动态计算得到的)
POPDecayAnimation可配置的属性与默认值为
1
|
deceleration:0.998 //衰减系数(越小则衰减得越快)
|
注意:POPDecayAnimation也是没有duration字段的 其动画持续时间由velocity与deceleration决定
接下来我们看一下POP默认支持哪些属性的动画 打开POPAnimatablePropery.h可以看到如下定义(这些是到目前为止 所支持的属性 随着版本的更新 还在不断的新增中 :)
1
|
/** |