POP动画[1]
POP动画[1]
pop动画是facebook扩展CoreAnimation的,使用及其方便:)
1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCornerRadius同时运行)
#import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h" @interface RootViewController () @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 初始化View
UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
showView.center = self.view.center;
showView.layer.cornerRadius = ;
showView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:showView]; // 延时7s后执行的代码
[[GCDQueue mainQueue] execute:^{ // 尺寸
POPSpringAnimation *bounds = \
[POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds]; // 圆角
POPSpringAnimation *cornerRadius = \
[POPSpringAnimation animationWithPropertyNamed:kPOPLayerCornerRadius]; bounds.toValue = [NSValue valueWithCGRect:CGRectMake(, , , )];
bounds.springSpeed = ; cornerRadius.toValue = @();
cornerRadius.springSpeed = ; // 添加动画
[showView.layer pop_addAnimation:bounds
forKey:@"size"];
[showView.layer pop_addAnimation:cornerRadius
forKey:@"cornerRadius"]; } afterDelay:NSEC_PER_SEC * ];
} @end
2:一个动画结束后开始另外一个动画
//
// RootViewController.m
// Animation
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h" @interface RootViewController ()<POPAnimationDelegate> @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 初始化View
UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
showView.center = self.view.center;
showView.layer.cornerRadius = ;
showView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:showView]; // 延时7s后执行的代码
[[GCDQueue mainQueue] execute:^{ // 位置
POPSpringAnimation *position = \
[POPSpringAnimation animationWithPropertyNamed:kPOPLayerPosition]; // 设置速度
position.springSpeed = .f; // 赋值
position.toValue = [NSValue valueWithCGPoint:CGPointMake(, )]; // 添加动画
[showView.layer pop_addAnimation:position forKey:nil]; // 结束后
[position setCompletionBlock:^(POPAnimation *animation, BOOL finished) {
// 颜色
POPSpringAnimation *backgroundColor = \
[POPSpringAnimation animationWithPropertyNamed:kPOPLayerBackgroundColor]; // 速度
backgroundColor.springSpeed = .f; // 赋值
backgroundColor.toValue = (id)[UIColor redColor].CGColor; // 添加动画
[showView.layer pop_addAnimation:backgroundColor forKey:nil];
}];
} afterDelay:NSEC_PER_SEC * ];
} @end
注意动画类型的不同导致toValue的值也不一样,这个始于CALayer的动画保持一致的:
3:动画中的代理
//
// RootViewController.m
// Animation
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h" @interface RootViewController ()<POPAnimationDelegate> @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 初始化View
UIView *showView = [[UIView alloc] initWithFrame:CGRectMake(, , , )];
showView.center = self.view.center;
showView.layer.cornerRadius = ;
showView.backgroundColor = [UIColor cyanColor];
[self.view addSubview:showView]; // 延时7s后执行的代码
[[GCDQueue mainQueue] execute:^{ // 尺寸
POPSpringAnimation *bounds = \
[POPSpringAnimation animationWithPropertyNamed:kPOPLayerBounds]; // 设置代理
bounds.delegate = self; bounds.toValue = [NSValue valueWithCGRect:CGRectMake(, , , )];
bounds.springSpeed = ; // 添加动画
[showView.layer pop_addAnimation:bounds
forKey:@"size"]; } afterDelay:NSEC_PER_SEC * ];
} // 动画开始
- (void)pop_animationDidStart:(POPAnimation *)anim
{
NSLog(@"pop_animationDidStart %@", anim);
} // 动画值动态改变
- (void)pop_animationDidApply:(POPAnimation *)anim
{
NSLog(@"pop_animationDidApply %@", anim);
} // 动画到达终点值
- (void)pop_animationDidReachToValue:(POPAnimation *)anim
{
NSLog(@"pop_animationDidReachToValue %@", anim);
} // 动画结束
- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished
{
NSLog(@"pop_animationDidStop %@", anim);
} @end
动画代理方法能够完整的表示出这个动画执行的过程,从开始到结束到中间值的改变我们都能获取到的.
4:按钮的动画效果
//
// RootViewController.m
// Animation
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h" @interface RootViewController ()<POPAnimationDelegate> @property (nonatomic, strong) UIButton *button; @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 完整显示按住按钮后的动画效果
_button = [[UIButton alloc] initWithFrame:CGRectMake(, , , )];
_button.layer.cornerRadius = .f;
_button.backgroundColor = [UIColor cyanColor];
_button.center = self.view.center;
[self.view addSubview:_button]; // 按住按钮后没有松手的动画
[_button addTarget:self
action:@selector(scaleToSmall)
forControlEvents:UIControlEventTouchDown | UIControlEventTouchDragEnter]; // 按住按钮松手后的动画
[_button addTarget:self
action:@selector(scaleAnimation)
forControlEvents:UIControlEventTouchUpInside]; // 按住按钮后拖拽出去的动画
[_button addTarget:self
action:@selector(scaleToDefault)
forControlEvents:UIControlEventTouchDragExit];
} - (void)scaleToSmall
{
NSLog(@"scaleToSmall"); POPBasicAnimation *scaleAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0.75f, 0.75f)];
[_button.layer pop_addAnimation:scaleAnimation forKey:@"layerScaleSmallAnimation"];
} - (void)scaleAnimation
{
NSLog(@"scaleAnimation"); POPSpringAnimation *scaleAnimation = [POPSpringAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.velocity = [NSValue valueWithCGSize:CGSizeMake(.f, .f)];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(.f, .f)];
scaleAnimation.springBounciness = 18.0f;
[_button.layer pop_addAnimation:scaleAnimation forKey:@"layerScaleSpringAnimation"];
} - (void)scaleToDefault
{
NSLog(@"scaleToDefault"); POPBasicAnimation *scaleAnimation = [POPBasicAnimation animationWithPropertyNamed:kPOPLayerScaleXY];
scaleAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(.f, .f)];
[_button.layer pop_addAnimation:scaleAnimation forKey:@"layerScaleDefaultAnimation"];
} @end
POP的动画真心强大呢:)
5:Stroke动画效果
//
// RootViewController.m
// Animation
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h"
#import "CAShapeLayer+Circle.h" @interface RootViewController ()<POPAnimationDelegate> @property (nonatomic, strong) GCDTimer *timer; @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; // 圆
CAShapeLayer *layer = [CAShapeLayer LayerWithCircleCenter:self.view.center
radius:.f
startAngle:DEGREES()
endAngle:DEGREES( + )
clockwise:YES
lineDashPattern:nil]; layer.strokeColor = [UIColor cyanColor].CGColor; // 边缘线的颜色
layer.lineCap = kCALineCapRound; // 边缘线的类型
layer.lineWidth = 5.0f; // 线条宽度
layer.strokeStart = 0.0f;
layer.strokeEnd = 1.0f; [self.view.layer addSublayer:layer]; _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
[_timer event:^{ CGFloat value1 = arc4random()%/.f;
CGFloat value2 = arc4random()%/.f; POPSpringAnimation *strokeAnimationEnd = \
[POPSpringAnimation animationWithPropertyNamed:kPOPShapeLayerStrokeEnd];
strokeAnimationEnd.toValue = @(value1 > value2 ? value1 : value2);
strokeAnimationEnd.springBounciness = .f; POPSpringAnimation *strokeAnimationStart = \
[POPSpringAnimation animationWithPropertyNamed:kPOPShapeLayerStrokeStart];
strokeAnimationStart.toValue = @(value1 < value2 ? value1 : value2);
strokeAnimationStart.springBounciness = .f; [layer pop_addAnimation:strokeAnimationEnd forKey:@"layerStrokeAnimation"];
[layer pop_addAnimation:strokeAnimationStart forKey:@"layerStrokeAnimation1"]; } timeInterval:*NSEC_PER_SEC];
[_timer start];
} @end
6:减速动画
//
// RootViewController.m
// Animation
//
// Copyright (c) 2014年 Y.X. All rights reserved.
// #import "RootViewController.h"
#import "YXEasing.h"
#import "POP.h"
#import "YXGCD.h" @interface RootViewController ()<POPAnimationDelegate> @property(nonatomic) UIControl *dragView; @end @implementation RootViewController - (void)viewDidLoad
{
[super viewDidLoad]; UIPanGestureRecognizer *recognizer = \
[[UIPanGestureRecognizer alloc] initWithTarget:self
action:@selector(handlePan:)]; self.dragView = [[UIControl alloc] initWithFrame:CGRectMake(, , , )];
self.dragView.center = self.view.center;
self.dragView.layer.cornerRadius = CGRectGetWidth(self.dragView.bounds)/;
self.dragView.backgroundColor = [UIColor cyanColor];
[self.dragView addGestureRecognizer:recognizer]; // 当触目的时候移除动画
[self.dragView addTarget:self
action:@selector(touchDown:)
forControlEvents:UIControlEventTouchDown]; [self.view addSubview:self.dragView];
} - (void)touchDown:(UIControl *)sender
{
[sender.layer pop_removeAllAnimations];
} - (void)handlePan:(UIPanGestureRecognizer *)recognizer
{
// 拖拽
CGPoint translation = [recognizer translationInView:self.view];
recognizer.view.center = CGPointMake(recognizer.view.center.x + translation.x,
recognizer.view.center.y + translation.y);
[recognizer setTranslation:CGPointMake(, ) inView:self.view];
NSLog(@"center %@", NSStringFromCGPoint(recognizer.view.center)); // 拖拽动作结束
if(recognizer.state == UIGestureRecognizerStateEnded)
{
// 计算出移动的速度
CGPoint velocity = [recognizer velocityInView:self.view];
NSLog(@"velocity %@", NSStringFromCGPoint(velocity)); // 衰退减速动画
POPDecayAnimation *positionAnimation = \
[POPDecayAnimation animationWithPropertyNamed:kPOPLayerPosition]; // 设置代理
positionAnimation.delegate = self; // 设置速度动画
positionAnimation.velocity = [NSValue valueWithCGPoint:velocity]; // 添加动画
[recognizer.view.layer pop_addAnimation:positionAnimation
forKey:@"layerPositionAnimation"];
}
} @end
计算出pan手势的在拖拽结束的时候的速度值.
POP动画[1]的更多相关文章
- iOS动画——弹窗动画(pop动画)
用pop动画简单实现弹窗的缩放和渐变,感觉这个动画常用,就写一下博客 pop动画是Facebook推出的动画引擎,请自行到GitHub上搜索下载拖拽导入xcode项目中. 更多pop动画使用和原理可网 ...
- 用POP动画引擎实现衰减动画(POPDecayAnimation)
效果图: #import "ViewController.h" #import <POP.h> @interface ViewController () @end @i ...
- POP动画引擎中Layer与CALayer的一点区别
POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步: https://github.com/facebook/pop 下面简单的讲 ...
- 用POP动画编写带富文本的自定义动画效果
用POP动画编写带富文本的自定义动画效果 [源码] https://github.com/YouXianMing/UI-Component-Collection [效果] [特点] * 支持富文本 * ...
- 用POP动画模拟真实秒钟摆动效果
用POP动画模拟真实秒钟摆动效果 静态图: 动画图: 此处用到了POP中的Spring系列动画,现提供源码如下: SecondClockView.h 与 SecondClockView.m // // ...
- POP动画[3]
POP动画[3] 这一节主要讲解POP动画的自定义动画属性. POP动画中有一个参数,叫timingFunction,与CoreAnimation中的一个参数CAMediaTimingFunction ...
- POP动画[2]
POP动画[2] 1:定制控制器间的转场动画. 源码有点多-_-!! // // RootViewController.h // Animation // // Copyright (c) 2014年 ...
- 自定义UINavigationController push和pop动画
http://segmentfault.com/q/1010000000143983 默认的UINavigationController push和pop的默认动画都是左右滑动推出,我的应用要求这种界 ...
- 转 脸书pop动画的五个步骤
http://blog.csdn.net/u013741809/article/details/38511741 5 Steps For Using Facebook Pop // 1. Pick ...
随机推荐
- Java网络编程基础之TCP粘包拆包
TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...
- java常量类的实现方式_枚举类_项目实践
前言 众所周知,系统里有很多比如订单状态.审核状态:性别.结算方式.交易类型等属性,这些属性只有几个值,一般用0.1.2.3等的数字标识存入数据库,每次对这些属性所属对象的增删改操作,都会在代码里给状 ...
- VisualSVN Server提供程序无法执行所尝试的操作 0x80041024
VisualSVN安装后没有提供VisualSVN Server Manager的快捷方式,如下图: 可以在安装目录的bin文件夹下找到VisualSVN Server.msc,添加快捷方式.建议Vi ...
- 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较
几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 来源 XFire VS Axis XFire是与Axis2 并列的新一代WebService平台.之所 ...
- js--常量,变量
常量 内存中的一个的固定的地址,其中的数值也是固定的 变量 内存的一个地址,其中的内容有我们更改维护 值类型与引用类型 改变值类型的变量时,影响值的变量 全大写的名称一般为常量 var a = 1 v ...
- CI中使用log4php调试程序
下载log4php.我下载的版本是:apache-log4php-2.3.0-src.zip.借压缩,将压缩文件中的src/main/php/文件夹拷贝到CI的application/thrid_pa ...
- “融而开放、合以创新”T-HIM融合通信技术开发实战
本文来自腾讯云技术沙龙,本次沙龙主题为T-HIM融合通信技术开发实战 2018年,企业的数字化转型大规模兴起,"数字化经济"时代来临.如何利用数字化技术来支持业务的转型.增长与创新 ...
- php中类和对象的操作
在类中用$this指代对象本身. 用self::指代类本身. $p1 = new Person('michael');//向Person类的构造函数__construct中传名字 echo($p1-& ...
- 判断浏览器 插件 jquery.ua.js
判断浏览器 插件 jquery.ua.js /*! * jquery.ua.js * @link https://github.com/cloudcome/jquery.ua * @author yd ...
- Java基础教程(3)--回顾HelloWorld
在上一篇文章中,我们已经编写了第一个Java程序--HelloWorld,并且对它进行了编译和运行.虽然这个例子很短小,但是它具有一个完整的Java程序所应该具有的结构.在这篇文章中,我将会对这个 ...