zoukankan      html  css  js  c++  java
  • iOS动画之CABasicAnimation的使用方法(移动,旋转,缩放)

      设定动画CABasicAnimation的属性和说明

    属性说明 
    duration 动画的时间
    repeatCount 重复的次数。不停重复设置为 HUGE_VALF
    repeatDuration 设置动画的时间。
    beginTime 指定动画开始的时间。从开始延迟几秒的话,设置为【CACurrentMediaTime() + 秒数】 的方式
    timingFunction 设置动画的速度变化
    autoreverses 动画结束时是否执行逆动画
    fromValue 所改变属性的起始值
    toValue 所改变属性的结束时的值
    byValue 所改变属性相同起始值的改变量

     

      //创建一个image view

      UIImageView *imageview=[[UIImageView alloc]init];

        imageview.image=[UIImage imageNamed:@"logo.png"];

        imageview.frame=CGRectMake(50, 50, imageview.image.size.width, imageview.image.size.height);

     

        [self.view addSubview:imageview];

      //动画关键字属性设置说明  

    说明使用形式
    transform.scale 比例转化 @(0.8)
    transform.scale.x 宽的比例 @(0.8)
    transform.scale.y 高的比例 @(0.8)
    transform.rotation.x 围绕x轴旋转 @(M_PI)
    transform.rotation.y 围绕y轴旋转 @(M_PI)
    transform.rotation.z 围绕z轴旋转 @(M_PI)
    cornerRadius 圆角的设置 @(50)
    backgroundColor 背景颜色的变化 (id)[UIColor purpleColor].CGColor
    bounds 大小,中心不变 [NSValue valueWithCGRect:CGRectMake(0, 0, 200, 200)];
    position 位置(中心点的改变) [NSValue valueWithCGPoint:CGPointMake(300, 300)];
    contents 内容,比如UIImageView的图片 imageAnima.toValue = (id)[UIImage imageNamed:@"to"].CGImage;
    opacity 透明度 @(0.7)
    contentsRect.size.width 横向拉伸缩放 @(0.4)最好是0~1之间的

      

      //1、移动

        CABasicAnimation *moveAnimate=[CABasicAnimation animationWithKeyPath:@"position"];

        //动画时长

         moveAnimate.duration=2.0;

         //动画重复次数

        moveAnimate.repeatCount=HUGE_VALF;

        //动画开始时间

         moveAnimate.beginTime=CACurrentMediaTime()+2;

        //是否自动执行逆动画

        moveAnimate.autoreverses=YES;

        //动画执行完后会回到初始状态,需要设置这两个属性

        moveAnimate.removedOnCompletion=NO;

        moveAnimate.fillMode=kCAFillModeForwards;

         //设置动画初始位置

        moveAnimate.fromValue=[NSValue valueWithCGPoint:imagetemp.layer.position];

        //设置动画目的位置

        moveAnimate.toValue=[NSValue valueWithCGPoint:CGPointMake(50, 50)];

        //设置动画速率

        moveAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

         //添加动画

        [imagetemp.layer addAnimation:moveAnimate forKey:@"move-layer"];

        //2、缩放

        CABasicAnimation *scaleAnimate=[CABasicAnimation animationWithKeyPath:@"transform.scale"];

        //动画时长

        scaleAnimate.duration=2.0;

        //动画重复次数

        scaleAnimate.repeatCount=HUGE_VALF;

        //动画开始时间

        scaleAnimate.beginTime=CACurrentMediaTime()+2;

        //是否自动执行逆动画

        scaleAnimate.autoreverses=YES; 

        //动画执行完后会回到初始状态,需要设置这两个属性

        scaleAnimate.removedOnCompletion=NO;

        scaleAnimate.fillMode=kCAFillModeForwards;

        //设置动画初始位置

        scaleAnimate.fromValue=[NSNumber numberWithFloat:1.0];

        //设置动画目的位置

        scaleAnimate.toValue=[NSNumber numberWithFloat:5.0];

        //设置动画速率

        scaleAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

        //添加动画

        [imagetemp.layer addAnimation:scaleAnimate forKey:@"scale-layer"];

         //3、旋转

        CABasicAnimation *rotateAnimate=[CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

        //动画时长

        rotateAnimate.duration=2.0;

         //动画重复次数

        rotateAnimate.repeatCount=HUGE_VALF;

        //动画开始时间

        rotateAnimate.beginTime=CACurrentMediaTime()+2;

        //是否自动执行逆动画

        rotateAnimate.autoreverses=YES;

        //动画执行完后会回到初始状态,需要设置这两个属性

        rotateAnimate.removedOnCompletion=NO;

        rotateAnimate.fillMode=kCAFillModeForwards;

        //设置动画初始位置

        rotateAnimate.fromValue=[NSNumber numberWithFloat:0];

        //设置动画目的位置

        rotateAnimate.toValue=[NSNumber numberWithFloat:M_PI];

        //设置动画速率

        rotateAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

        //添加动画

        [imagetemp.layer addAnimation:rotateAnimate forKey:@"rotate-layer"];

        //4、渐隐动画

        CABasicAnimation *opacityAnimate=[CABasicAnimation animationWithKeyPath:@"opacity"];

        //动画时长

        opacityAnimate.duration=2.0;

        //动画重复次数

        opacityAnimate.repeatCount=HUGE_VALF;

        //动画开始时间

        opacityAnimate.beginTime=CACurrentMediaTime()+2;

        //是否自动执行逆动画

        opacityAnimate.autoreverses=YES;

        //动画执行完后会回到初始状态,需要设置这两个属性

        opacityAnimate.removedOnCompletion=NO;

        opacityAnimate.fillMode=kCAFillModeForwards;

        //设置动画初始位置

        opacityAnimate.fromValue=[NSNumber numberWithFloat:0];

         //设置动画目的位置

        opacityAnimate.toValue=[NSNumber numberWithFloat:1];

        //设置动画速率

        opacityAnimate.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

        //添加动画

        [imagetemp.layer addAnimation:opacityAnimate forKey:@"opacity-layer"];

        //5、组合动画

         CAAnimationGroup *group=[CAAnimationGroup animation];

        //动画时长

        group.duration=2.0;

        //动画重复次数

        group.repeatCount=HUGE_VALF;

        group.animations=[NSArray arrayWithObjects:moveAnimate,scaleAnimate,rotateAnimate,opacityAnimate, nil];

        //添加动画

        [imagetemp.layer addAnimation:group forKey:@"group-layer"];

        //6、设置委托,添加CAAnimationDelegate,监测开始和结束事件

         group.delegate=self;

     

    - (void)animationDidStart:(CAAnimation *)theAnimation {

       //动画开始了

     }

     

    - (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {

       //动画结束了

     

     }

     

  • 相关阅读:
    C语言与内存模型初探
    【编辑中】软件工程知识萃取
    【深入理解计算机系统01】不同层级程序指令间的转换
    【统计学中的普适智慧】假设检验
    windows 内部预览版与迅雷极速版不配合
    网络安全理论初涉
    Unix philosophy
    BOP 2016 复赛题目
    10.8做题——USACO1.2命名那个数字(Name That Number)
    10.6上课——problem1切割木板(USACO 2006 November Gold)
  • 原文地址:https://www.cnblogs.com/bigant9527/p/14178860.html
Copyright © 2011-2022 走看看