Facebook开源动画库 POP-POPSpringAnimation运用
POPSpringAnimation也许是大多数人使用POP的理由 其提供一个类似弹簧一般的动画效果;实例源代码已经上传至gitHub,地址:https://github.com/wujunyang/facebookPopTest
POPSpringAnimation可配置的属性与默认值为
springBounciness:4.0 //[0-20] 弹力 越大则震动幅度越大
springSpeed :12.0 //[0-20] 速度 越大则动画结束越快
dynamicsTension :0 //拉力 接下来这三个都跟物理力学模拟相关 数值调整起来也很费时 没事不建议使用哈
dynamicsFriction:0 //摩擦 同上
dynamicsMass :0 //质量 同上
注意:POPSpringAnimation是没有duration字段的 其动画持续时间由以上几个参数决定
实例1:实现一个X轴运动并有反弹效果的动画,在完成动画后输出当前的坐标值
//1:初始化第一个视图块
if (self.myRedView==nil) {
self.myRedView=[[UIView alloc]initWithFrame:CGRectMake(, , , )];
self.myRedView.backgroundColor=[UIColor redColor];
[self.view addSubview:self.myRedView];
} //创建一个POPSpringAnimation动画 实现X轴运动 有反弹效果
POPSpringAnimation *anSpring = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anSpring.toValue =@();
anSpring.beginTime = CACurrentMediaTime() + 1.0f;
anSpring.springBounciness=14.0; //[0-20] 弹力 越大则震动幅度越大
anSpring.springSpeed=12.0; //[0-20] 速度 越大则动画结束越快
[anSpring setCompletionBlock:^(POPAnimation *prop, BOOL fint) {
if (fint) {
NSLog(@"self.myRedView.frame=%@",NSStringFromCGRect(self.myRedView.frame));
}
}];
[self.myRedView pop_addAnimation:anSpring forKey:@"myRedViewposition”];
可以查看到动画结束后,输出的值为:self.myRedView.frame={{285, 80}, {30, 30}}
实例2:实现一个视图块闪动的效果,从0.2到1.0的弹效果 缩放效果
//2:初始化一个视图块
if (self.myLayView==nil) {
self.myLayView=[[UIView alloc]initWithFrame:CGRectMake(, , , )];
self.myLayView.backgroundColor=[UIColor blueColor];
[self.view addSubview:self.myLayView];
}
//创建一个POPSpringAnimation动画 实现闪一下效果 从0.2到1.0的弹效果 缩放效果
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.fromValue = [NSValue valueWithCGSize:CGSizeMake(0.2, 0.2f)];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
scaleAnimation.beginTime = CACurrentMediaTime() + 1.0f;
scaleAnimation.springBounciness = 20.0f;
scaleAnimation.springSpeed = 20.0f;
[self.myLayView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation”];
实例3:创建一个POPSpringAnimation动画 将视图进行旋转
//3:初始化一个视图块
if (self.myRotaView==nil) {
self.myRotaView=[[UIView alloc]initWithFrame:CGRectMake(, , , )];
self.myRotaView.backgroundColor=[UIColor yellowColor];
[self.view addSubview:self.myRotaView];
}
//创建一个POPSpringAnimation动画 将视图进行旋转
POPSpringAnimation *rotationAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerRotation];
rotationAnimation.beginTime = CACurrentMediaTime() + 0.2;
rotationAnimation.toValue = @(1.2);
rotationAnimation.springBounciness = .f;
rotationAnimation.springSpeed = ;
[self.myRotaView.layer pop_addAnimation:rotationAnimation forKey:@"rotationAnim”];
实例4:创建一个POPSpringAnimation动画 按键左右摇动
//4:初始化一个按键
if (self.myButton==nil) {
self.myButton=[[UIButton alloc]init];
self.myButton.frame=CGRectMake(, , , );
self.myButton.backgroundColor = [UIColor grayColor];
[self.myButton setTitle:@"登录" forState:UIControlStateNormal];
[self.myButton addTarget:self action:@selector(touchUpInside:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:self.myButton];
}
响应事件内容:
-(void)touchUpInside:(id)sender
{
//创建一个POPSpringAnimation动画 按键左右摇动
POPSpringAnimation *positionAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerPositionX];
positionAnimation.velocity = @;
positionAnimation.springBounciness = ;
[positionAnimation setCompletionBlock:^(POPAnimation *animation, BOOL finished) {
self.myButton.userInteractionEnabled = YES;
}];
[self.myButton.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
}
实例5:结合先前的POPBasicAnimation动画,制画一个综合的动画效果,就是向下显示一个视图,又可以回收回去;
@interface OtherViewController ()
@property(assign,nonatomic)BOOL isMenuOpen;
@property(strong,nonatomic)UIView *myMenuView;
@property(nonatomic)CGPoint VisiblePosition,HiddenPosition;
@end
@implementation OtherViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor whiteColor];
_isMenuOpen=NO;
self.VisiblePosition=CGPointMake(, );
self.HiddenPosition=CGPointMake(, -);
UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"显示" style:UIBarButtonItemStylePlain
target:self action:@selector(refreshPropertyList)];
self.navigationItem.rightBarButtonItem = anotherButton;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void)refreshPropertyList
{
if (_isMenuOpen) {
[self hidePopup];
}
else
{
[self showPopup];
}
}
//隐藏时响应
- (void)hidePopup
{
_isMenuOpen = NO;
POPBasicAnimation *opacityAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity];
opacityAnimation.fromValue = @();
opacityAnimation.toValue = @();
[self.myMenuView.layer pop_addAnimation:opacityAnimation forKey:@"opacityAnimation"];
POPBasicAnimation *positionAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPosition];
positionAnimation.fromValue = [NSValue valueWithCGPoint:self.VisiblePosition];
positionAnimation.toValue = [NSValue valueWithCGPoint:self.HiddenPosition];
[self.myMenuView.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.fromValue = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0.5f, 0.5f)];
[self.myMenuView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"];
}
//显示时响应
- (void)showPopup
{
//初始化视图
if (self.myMenuView==nil) {
self.myMenuView=[[UIView alloc]initWithFrame:CGRectMake(,, , )];
self.myMenuView.backgroundColor=[UIColor redColor];
[self.view addSubview:self.myMenuView];
}
_isMenuOpen = YES;
POPBasicAnimation *opacityAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerOpacity];
opacityAnimation.fromValue = @();
opacityAnimation.toValue = @();
opacityAnimation.beginTime = CACurrentMediaTime() + 0.1;
[self.myMenuView.layer pop_addAnimation:opacityAnimation forKey:@"opacityAnimation"];
POPBasicAnimation *positionAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerPosition];
positionAnimation.fromValue = [NSValue valueWithCGPoint:self.HiddenPosition];
positionAnimation.toValue = [NSValue valueWithCGPoint:self.VisiblePosition];
[self.myMenuView.layer pop_addAnimation:positionAnimation forKey:@"positionAnimation"];
POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.fromValue = [NSValue valueWithCGSize:CGSizeMake(0.5, 0.5f)];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(1.0f, 1.0f)];
scaleAnimation.springBounciness = 20.0f;
scaleAnimation.springSpeed = 20.0f;
[self.myMenuView.layer pop_addAnimation:scaleAnimation forKey:@"scaleAnimation"];
}
@end
最近有个妹子弄的一个关于扩大眼界跟内含的订阅号,每天都会更新一些深度内容,在这里如果你感兴趣也可以关注一下(嘿对美女跟知识感兴趣),当然可以关注后输入:github 会有我的微信号,如果有问题你也可以在那找到我;当然不感兴趣无视此信息;

Facebook开源动画库 POP-POPSpringAnimation运用的更多相关文章
- Facebook 开源动画库 pop
官网:https://github.com/facebook/pop Demo: https://github.com/callmeed/pop-playground 一:pop的基本构成: POPP ...
- 使用 Facebook开源动画库 POP 实现真实衰减动画
1. POP动画基于底层刷新原理.是基于CADisplayLink,1秒钟运行60秒,接近于游戏开发引擎 @interface ViewController () @property (nonatom ...
- Facebook开源动画库 POP-POPBasicAnimation运用
动画在APP开发过程中还是经常出现,将花几天的时间对Facebook开源动画库 POP进行简单的学习:本文主要针对的是POPBasicAnimation运用:实例源代码已经上传至gitHub,地址:h ...
- Facebook开源动画库 POP-小实例
实例1:图片视图跟着手在屏幕上的点改变大小 - (void)viewDidLoad { [super viewDidLoad]; //添加手势 UIPanGestureRecognizer *gest ...
- Facebook开源动画库 POP-POPDecayAnimation运用
关于POPDecayAnimation的介绍先引用别人写的一些内容,基本上把它的一些注意点都说明了: Decay Animation 就是 POP 提供的另外一个非常特别的动画,他实现了一个衰减的效果 ...
- rebound是facebook的开源动画库
网址:http://www.jcodecraeer.com/a/opensource/2015/0121/2338.html 介绍: rebound是facebook的开源动画库.可以认为这个动画库是 ...
- [转] iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么?
iOS 动画库 Pop 和 Canvas 各自的优势和劣势是什么? http://www.zhihu.com/question/23654895/answer/25541037 拿 Canvas 来和 ...
- 第三方开源动画库EasyAnimation中一个小bug的修复
看过iOS动画之旅的都知道,其中在最后提到一个作者写的开源动画库EasyAnimation(以下简称EA). EA对CoreAnimation中的view和layer动画做了更高层次的包装和抽象,使得 ...
- Lottie安卓开源动画库使用
碉堡的Lottie Airbnb最近开源了一个名叫Lottie的动画库,它能够同时支持iOS,Android与ReactNative的开发.此消息一出,还在苦于探索自定义控件各种炫酷特效的我,兴奋地就 ...
随机推荐
- 扩展HT for Web之HTML5表格组件的Renderer和Editor
在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条 color picker:颜色选择器 enum:枚举类型 boolean:真假编辑器 string:普通的文本编辑 ...
- Design Pattern: Not Just Mixin Pattern
Brief 从Mix-In模式到Mixin模式,中文常用翻译为“混入/织入模式”.单纯从名字上看不到多少端倪,而通过采用Mixin模式的jQuery.extend我们是否可以认为Mixin模式就是深拷 ...
- SpringAOP使用扩展
在<初识Spring>中我们了解到Spring支持AOP且可配置方法的前置曾强和后置曾强,但其实Spring支持多种曾强类型.下面同过一些例子来介绍Spring的几种常用的曾强(前置增强和 ...
- OpenStack虚拟云桌面在携程呼叫中心的应用
编者:本文为刘科在第六期[携程技术微分享]中的分享内容.在携程技术中心(微信号ctriptech)微信后台回复[云桌面],可加入微信交流群,和关注云桌面的小伙伴一起玩耍~ 刘科,携程系统研发云平台桌面 ...
- 试试用有限状态机的思路来定义javascript组件
本文是一篇学习性的文章,学习利用有限状态机的思想来定义javascript组件的方法,欢迎阅读,后续计划会写几篇专门介绍自己利用有限状态机帮助自己编写组件的博客,证明这种思路对于编程实现的价值,目前正 ...
- C# 模拟提交 Form表单的数据
用 HttpWebRequest Post方法模拟提交Form表单数据时,需要设置 ContentType 为 "application/x-www-form-urlencoded" ...
- 微信开发jssdk入门
一个项目需要在微信里获得当前位置,于是就开始了我的微信开发之旅... 微信JSSDK说明文档http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9 ...
- Web API应用架构在Winform混合框架中的应用(1)
在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...
- WinPhone学习笔记(二)——页面外观剖析
上一个篇博文说了WinPhone页面内部的东西,现在介绍表面的东西,先来看看一下一个WinPhone页面 这个页面分了三部分:顶部这个是状态栏, 中间这个是一个页面的内容部分, 最下面则是应用程序栏 ...
- mysql常用函数参考
mysql常用函数参考 对于针对字符串位置的操作,第一个位置被标记为1. ASCII(str) 返回字符串str的最左面字符的ASCII代码值.如果str是空字符串,返回0.如果str是NULL, ...