facebook pop动画引擎新增了spring和decay两种动画特效。 那这两种特效什么场合使用比较好呢?下面就介绍一下我在使用时的一些理解。
spring效果:
中文理解为弹簧效果。最能体现这种效果的就是scaleAnimation。设置fromValue或toValue,就会看见scale大小的变化带着弹簧效果,而不是线性的。
示例代码:
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.springBounciness = 20;
scaleAnimation.fromValue = [NSValue valueWithCGPoint:CGPointMake(1.2, 1.4)];
[toView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"];
所以spring效果主要能在面积大小改变的动画中体现出来。
decay效果:
举个栗子:有一项运动叫做冰壶,运动员在冰面丢出一个冰壶,这个冰壶在冰面上会逐渐逐渐慢下来,最终停止。那么这个冰壶从速度最大到速度为零的整个过程中,速率的衰减就是一个decay过程。decay特效就是模拟这种自然衰退的过程。
所以这种效果比较适合用在关于速率方面的动画。比如,界面上有一个球型的图像,用户可以在界面上拖动这个图像。如果不加任何效果,用户手指拖到哪,图像就停留在哪。
如果在用户停止拖动瞬间获得拖动的速率,再用这个速率作为初始速率,用POPDecayAnimation就能实现图像的自然衰退停止,就像一个球自然的慢慢滚动停止。
示例代码:
CGPoint velocity = [recognizer velocityInView:self.view];
POPDecayAnimation *positionAnimation = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPosition];
positionAnimation.velocity = [NSValue valueWithCGPoint:velocity];
[recognizer.view.layer pop_addAnimation:positionAnimation forKey:@"layerPositionAnimation"];
所以decay效果比较能在线性的速率改变中体现出效果,比如position的移动。