FaceBook POP动画的几个示例

来源:互联网 发布:安卓广告拦截软件 知乎 编辑:程序博客网 时间:2024/06/06 19:48

pod ‘pop’,’~>1.0’  安装pop动画框架

Pop是一个动画引擎,支持弹簧动画效果与衰减动画效果,可以用Pop构建出真实的物理交互效果。可以满足大多数的动画效果

动画类型

POPBasicAnimation  基本动画 
POPSpringAnimation  弹簧动画
POPDecayAnimation 减速动画
POPCustomAnimation 自定义动画

平移动画

kPOPLayerPositionY Y 坐标改变,,点击去可知它是calayer 使用的,需要calayer 对象添加这个动画

fromValue 和 toValue 规定了 view 的Y坐标的移动位置,,


  UIView *view = [[UIViewalloc]initWithFrame:CGRectMake(0,300,50,50)];
    [
self.viewaddSubview:view];
    view.
backgroundColor = [UIColorredColor];
   
// 设置对Y进行平移操作
   
POPBasicAnimation* spring = [POPBasicAnimationanimationWithPropertyNamed:kPOPLayerPositionY]; 
    /// 延时2秒执行 防止控制器push动画的影响
    spring.
beginTime =CACurrentMediaTime()+2;
    /// 动画时长为1s
    spring.
duration =1.0f;
    /// Y位置的起始位置
    spring.
fromValue =@(0.f);
    /// Y位置的结束位置,,view的添加的位置
    spring.
toValue =@(CGRectGetMinY(view.frame));
    /// 动画结束的时候
    [spring
setCompletionBlock:^(POPAnimation * ani, BOOL fin) {
        /// 可以再接一个动画
    }];

    /// 添加动画
    [view.layerpop_addAnimation:springforKey:@"spring”];

颜色渐变动画
kPOPViewBackgroundColor 背景颜色变化 UIview 对象使用
 // 1.初始化
   
POPBasicAnimation *basic = [POPBasicAnimationanimationWithPropertyNamed:kPOPViewBackgroundColor];
   
// 2.设置初始值
    basic.
fromValue = [UIColorblackColor];
    basic.
toValue = [UIColorredColor];
   
//动画的时长
    basic.
duration =4.0;
   
//动画类型系统预设的类型有以下5种:
   
//    kCAMediaTimingFunctionLinear           线性,即匀速
   
//    kCAMediaTimingFunctionEaseIn           先慢后快
   
//    kCAMediaTimingFunctionEaseOut          先快后慢
   
//    kCAMediaTimingFunctionEaseInEaseOut    先慢后快再慢
   
//    kCAMediaTimingFunctionDefault          实际效果是动画中间比较快
    basic.
timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    basic.
beginTime =CACurrentMediaTime() +1.f;
   
// 3.添加到view
    [view
pop_addAnimation:basicforKey:@"colorAnimation"];

视图旋转动画
 UIView *view = [[UIViewalloc]initWithFrame:CGRectMake(0,300,50,50)];
    [
self.viewaddSubview:view];
    view.
backgroundColor = [UIColorredColor];
   
POPBasicAnimation* basic = [POPBasicAnimationanimationWithPropertyNamed:kPOPLayerRotation];
    basic.
beginTime =CACurrentMediaTime()+2;
    basic.
timingFunction = [CAMediaTimingFunctionfunctionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    /// 逆时针旋转pi/4
    basic.
toValue = [NSNumbernumberWithFloat:-M_PI_4];
    basic.
duration =1.4f;
[view.layerpop_addAnimation:basicforKey:@"basic"];

回弹动画 动画带回弹效果
UIView *view = [[UIViewalloc]initWithFrame:CGRectMake(0,300,50,50)];
    [
self.viewaddSubview:view];
    view.
backgroundColor = [UIColorredColor];
    // 设置弹簧动画的路径为Y变化
   
POPSpringAnimation* spring = [POPSpringAnimationanimationWithPropertyNamed:kPOPLayerPositionY];
     // 设置开始时间
    spring.
beginTime =CACurrentMediaTime()+2;
    //  Y的起始值

    spring.
fromValue =@(10.f);
    // Y的结束值
    spring.
toValue =@(CGRectGetMinY(view.frame));
    // 质量 质量越大动画速度越慢,,振幅幅度越大,,结束的越慢
    spring.
dynamicsMass =10;
    // 振幅设置 0-20 默认4
    spring.
springBounciness =20.f;
    // 速度 0-20
    spring.
springSpeed =2.f;
    [spring
setCompletionBlock:^(POPAnimation * ani, BOOL fin) {
       
    }];

    /// 添加动画
    [view.layerpop_addAnimation:springforKey:@"spring”];



带回弹的视图放大动画
kPOPViewScaleXY  视图宽高 的变化 tovalue 决定了视图放大二倍 UIview 对象使用 再用calayer 对象去添加会崩溃

UIView *view = [[UIViewalloc]initWithFrame:CGRectMake(0,300,50,50)];
    [
self.viewaddSubview:view];
    view.
backgroundColor = [UIColorredColor];
   // 1.初始化
   
POPSpringAnimation *anim = [POPSpringAnimationanimationWithPropertyNamed:kPOPViewScaleXY];
   
// 2.设置变化后的值 放大二倍
    anim.
toValue = [NSValuevalueWithCGSize:CGSizeMake(2,2)];
   
//速度可以设置的范围是0-20,默认为12.值越大速度越快,结束的越快
    anim.
springSpeed =2.f;
   
//振幅可以设置的范围是0-20,默认为4。值越大振动的幅度越大
    anim.
springBounciness =10.f;
    anim.
dynamicsMass =10;
    anim.
beginTime =CACurrentMediaTime() +1.f;
    anim.completionBlock = ^(POPAnimation *anim, BOOL finished) {
       // 动画结束后进行相关操作  可以再写个动画
    };
    [viewpop_addAnimation:animforKey:@"ScaleXY"];
减速动画  拖拽一个视图结束的时候 会有的惯性减速效果

 self.showView = [[UIView alloc]initWithFrame:CGRectMake(20,100, 100,100)];

    self.showView.backgroundColor = [UIColor redColor];

    [self.viewaddSubview:self.showView];

    //添加手势

    UIPanGestureRecognizer *pan =  [[UIPanGestureRecognizeralloc]initWithTarget:selfaction:@selector(handGesture:)];

    [self.showViewaddGestureRecognizer:pan];


- (void)handGesture:(UIPanGestureRecognizer*)recognizer{

   /// translationInView:获取到的是手指移动后,在相对坐标中的偏移量

    /// locationInView:获取到的是手指点击屏幕实时的坐标点;

    CGPoint translation = [recognizertranslationInView:recognizer.view];

    recognizer.view.center =CGPointMake(translation.x + recognizer.view.center.x,

                                         translation.y + recognizer.view.center.y);

    [recognizer setTranslation:CGPointMake(0,0) inView:self.view];

    if (recognizer.state ==UIGestureRecognizerStateEnded) {//松手的时候执行

        //获得加速度

        CGPoint velocity = [recognizervelocityInView:self.view];

        //添加pop动画

        POPDecayAnimation *decayAnimation = [POPDecayAnimationanimationWithPropertyNamed:kPOPLayerPosition];

        decayAnimation.delegate =self; //  <POPAnimationDelegate>

        decayAnimation.velocity = [NSValuevalueWithCGPoint:velocity];

        [recognizer.view.layerpop_addAnimation:decayAnimationforKey:nil];

    }

}


#pragma mark 动画结束的协议方法

- (void)pop_animationDidStop:(POPAnimation *)anim finished:(BOOL)finished {

    if (!CGRectContainsPoint(self.view.frame,self.showView.center)) {

        self.showView.frame =CGRectMake(20,100, 100,100);

    }

}





原创粉丝点击