pop

POP简介

Facebook Pop其实是基于CADisplayLink(Mac平台上使用的CVDisplayLink)实现的独立于Core Animation之外的动画方案

与Core Animation对比

Pop Animation在使用上和Core Animation很相似,都涉及Animation对象以及Animation的载体的概念,不同的是Core Animation的载体只能是CALayer,而Pop Animation可以是任意基于NSObject的对象。当然大多数情况Animation都是界面上显示的可视的效果,所以动画执行的载体一般都直接或者间接是UIView或者CALayer。

Pop Animation应用于CALayer时,在动画运行的任何时刻,layer和其presentationLayer的相关属性值始终保持一致,而Core Animation做不到。

POP动画结构

POP默认支持三种动画,但同时也支持自定义动画。

//继承自POPPropertyAnimation ,POPPropertyAnimation继承自POPAnimation
POPBasicAnimation        //基础动画
POPSpringAnimation       //弹簧动画
POPDecayAnimation        //减速动画

//继承自POPAnimation
POPCustomAnimation       //自定义动画

POPAnimation

属性
@property (assign, nonatomic) CFTimeInterval beginTime;  //开始时间
@property (weak, nonatomic) id delegate;  //代理,
@property (readonly, nonatomic) POPAnimationTracer *tracer;
@property (copy, nonatomic) void (^animationDidStartBlock)(POPAnimation *anim);  //动画开始block
@property (copy, nonatomic) void (^animationDidReachToValueBlock)(POPAnimation *anim);  //完成到valueblock
@property (copy, nonatomic) void (^completionBlock)(POPAnimation *anim, BOOL finished);  //完成block
@property (copy, nonatomic) void (^animationDidApplyBlock)(POPAnimation *anim);  //动画途中多次调用。
@property (assign, nonatomic) BOOL removedOnCompletion;  //完成移除
@property (assign, nonatomic, getter = isPaused) BOOL paused;  //暂停
@property (assign, nonatomic) BOOL autoreverses;  //返回原点
@property (assign, nonatomic) NSInteger repeatCount; //重复次数
@property (assign, nonatomic) BOOL repeatForever;  //一直重复
代理方法
- (void)pop_animationDidStart:(POPAnimation *)anim;   //动画开始调用
- (void)pop_animationDidReachToValue:(POPAnimation *)anim;   //到达value调用
- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished;   //结束动画调用

POPPropertyAnimation

使用动画时需要指定animationProperty。具体的值参考POPAnimatableProperty.mm文件

属性
@property (strong, nonatomic) POPAnimatableProperty *property; //动画性质
@property (copy, nonatomic) id fromValue;     //动画初始值    需要与property类型对应   不写默认当前值
@property (copy, nonatomic) id toValue;       //动画目标值    需要与property类型对应
属性与value对应关系

单个float类型:

//写法
anBasic.toValue = @(2.0f);  
anBasic.toValue = [NSValue valueWithCGPoint:CGPointMake(2.0f, 3.0f)];//只有第一个值有效
anBasic.toValue = [NSValue valueWithCGRect:CGRectMake(3.14f, 0, 0, 0)];//只有第一个值有效

//属性类型
Alpha         //透明值  取值区间[0,1]  0时完全消失,不能响应事件
Opacity     //透明值   取值区间[0,1]  0时完全消失,不能响应事件
ScaleX        //宽度放大倍数  
ScaleY        //高度放大倍数
positionX     //中心点X坐标位置
positionY     //中心点Y坐标位置
Rotation      //顺时针旋转π为一周
RotationX     //绕中心X轴旋转π为一周
RotationY     //绕中心Y轴旋转π为一周
BorderWidth   //边距
...

两个float类型:

//写法
anBasic.toValue = [NSValue valueWithCGPoint:CGPointMake(2.0f, 3.0f)];
anBasic.toValue = [NSValue valueWithCGRect:CGRectMake(3.14f, 5.0f, 0, 0)];//只有前两个值有效

//属性类型
Size       //宽高
ScaleXY    //宽高放大倍数
position   //中心点XY值
Center     //中心点XY值

四个float类型:

//写法
anBasic.toValue = [NSValue valueWithCGRect:CGRectMake(100, 100, 100, 100)];

//属性类型
frame
bounds

color类型

//写法
anBasic.toValue = [UIColor blueColor];

PopBasicAnimation

特有属性
@property (assign, nonatomic) CFTimeInterval duration;  //持续时长
@property (strong, nonatomic) CAMediaTimingFunction *timingFunction;  //赛贝尔曲线

示例

POPBasicAnimation *anBasic = [POPBasicAnimation animationWithPropertyNamed:kPOPViewFrame];
anBasic.toValue = [NSValue valueWithCGRect:CGRectMake(100, 100, 100, 100)];
anBasic.beginTime = CACurrentMediaTime();
anBasic.duration = 0.5f;   //设置时长
anBasic.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];  //设置赛贝尔曲线
[self.button pop_addAnimation:anBasic forKey:@"frame"];

POPSpringAnimation

持续时长由下面的时间算出,不能设定

特有属性
 @property (copy, nonatomic) id velocity;  //速度 CGPoint(x速度,y速度)
@property (assign, nonatomic) CGFloat springBounciness; //弹力  越大则震动幅度越大  默认4.0f
@property (assign, nonatomic) CGFloat springSpeed;      //弹簧速度   越大则动画结束越快  默认12.0f

//更细地调控动画,调试比较耗时,一般用上面三个属性就行。
@property (assign, nonatomic) CGFloat dynamicsTension; //拉力-影响回弹力度以及速度  默认11.090783f
@property (assign, nonatomic) CGFloat dynamicsFriction; // 摩擦力-如果开启,动画会不断重复,幅度逐渐削弱,直到停止。  默认342.100588f
@property (assign, nonatomic) CGFloat dynamicsMass;  //质量-细微的影响动画的回弹力度以及速度  默认1.0f
示例
POPSpringAnimation * anSpring = [POPSpringAnimation animationWithPropertyNamed:kPOPViewCenter];
anSpring.toValue = [NSValue valueWithCGPoint:CGPointMake(self.button.center.x, self.button.center.y+200)];
anSpring.springSpeed = 20.0f;    //设置弹簧速度
anSpring.springBounciness = 30.0f;  //设置弹力
[self.button pop_addAnimation:anSpring forKey:@"center"];

POPDecayAnimation

特有属性
@property (copy, nonatomic) id velocity;   //速率
@property (assign, nonatomic) CGFloat deceleration;  //速度衰减速率 默认0.998  取值区间(0,1)
 //但是我测试这个值deceleration越大,速度衰减速率越慢且与1-deceleration有关
示例
PopDecayAnimation *anDecay = [POPDecayAnimation animationWithPropertyNamed:kPOPLayerPositionX];
anDecay.velocity = @(50.0);
anDecay.deceleration = 0.998;//0.998动画持续1.150141s  0.999动画持续2.301434s  0.9999动画持续23.024700
[self.button pop_addAnimation:anDecay forKey:@"PositionX"];

你可能感兴趣的:(pop)