IOS动画效果的实现

倾然丶 夕夏残阳落幕 提交于 2020-01-06 05:00:57

     对于动画的使用,其实一直以来就不是很熟悉,因为平时使用的也少,使用也只是简单的使用.其实关于动画,一直在IOS中广泛存在.有时我们在调用某个方法时,经常会有一个参数Animation,填入BOOL参数,选择是否需要动画效果.

    今天我就浅谈一下几种基本动画的实现.

    首先为了测试动画效果,我随便声明了一个View.

    self.animationView = [[UIView alloc] initWithFrame:CGRectMake(50 , 100 , 100, 50)];

    self.animationView.backgroundColor = [UIColor blueColor];

    [self.view addSubview:self.animationView];     //初始化位置,并且赋颜色,用于测试

    首先,是简单的移动,从一个位置移动到另一个位置.用UIView动画就可以

      [UIView animateWithDuration:0.5 animations:^{   //其中duration是动画时间参数,还有几个差不多的方法,就不一一列举了

//            self.animationView.frame = CGRectMake(0, 451, 375, 216);

//            

//        }];

    

     [UIView animateWithDuration:0.5 delay:3 options:UIViewAnimationOptionRepeat animations:^{   //delay参数表示延时几秒进行,options参数是枚举值,填入不同的,有不同效果,这个枚举值表示重复

        

        //  self.animationView.frame = CGRectMake(0, 451, 375, 216);

    } completion:^(BOOL finished) {

        

        

    }];

//接下来是颤抖效果

        [UIView animateWithDuration:0.5 delay:2 usingSpringWithDamping:0.01 initialSpringVelocity:10 options:UIViewAnimationOptionAllowAnimatedContent animations:^{

//            NSLog(@"wowoow");

//            vc.animationView.frame =  CGRectMake(0, 451, 375, 216);

//            

//        } completion:^(BOOL finished) {

//            

//            

//        }];

 

接下来是2D仿射变换

    //1.rotate 旋转

    //2.M_PI 圆周率 M_PI = 180度

 //    [UIView beginAnimations:@"键盘" context:nil];

//    [UIView setAnimationDuration:0.5];

//       self.animationView.transform = CGAffineTransformRotate(self.animationView.transform, M_LOG10E);  //效果是旋转一定角度,第二个参数填入的时角度值

 

缩放和向下向左移动

 

  //缩放

   // self.animationView.transform = CGAffineTransformScale(self.animationView.transform, 0.5, 0.5);

    //参数1.向右

    //参数2.向下

    //self.animationView.transform = CGAffineTransformTranslate(self.animationView.transform, 0, 10);

 

除了以上的动画方式外,还有CALayer动画

     

    CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];//rotation表示旋转,scale表示缩放.

    basicAnimation.duration = 2;//动画时间

    //重复次数

    basicAnimation.repeatCount = NSIntegerMax;  //无限重复

    

    //是否恢复到原来的状态

    basicAnimation.autoreverses = NO;

    //是从什么状态开始动画

    basicAnimation.fromValue = [NSNumber numberWithInt:0];

    //是从什么状态结束动画

    basicAnimation.toValue = [NSNumber numberWithInt:4];

    [self.animationView.layer addAnimation:basicAnimation forKey:@"键盘"];

 当然合一把旋转和缩放一起添加入动画组,使之实现旋转的过程中进行缩放

   CAAnimationGroup *group = [CAAnimationGroup animation];

    group.animations = @[basicAnimation, basicAnimation1];

    group.repeatCount = NSIntegerMax;

    group.autoreverses = YES;

    group.duration = 2;

    [self.animationView.layer addAnimation:group forKey:@"wowowoo"];

   

#pragma mark -- 关键帧动画   关键帧动画可以让你的view的layer按照预定的轨迹做动画.

    CAKeyframeAnimation *keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

    //创建路径

    CGMutablePathRef path = CGPathCreateMutable();

    //创建路径的起始坐标 起始点是锚点 也就是中心点

    CGPathMoveToPoint(path, NULL, self.animationView.center.x, self.animationView.center.y);

    //设置画面移动的点

    CGPathAddLineToPoint(path, NULL, 100, 100);

    CGPathAddLineToPoint(path, NULL, 150, 120);

    CGPathAddLineToPoint(path, NULL, 100, 140);

    CGPathAddLineToPoint(path, NULL, 150, 160);

    CGPathAddLineToPoint(path, NULL, 100, 180);

    CGPathAddLineToPoint(path, NULL, 150, 200);

    //设置动画移动的曲线轨迹

    CGPathAddCurveToPoint(path, NULL, 20, 40, 100, 140, 200, 60);

     CGPathAddCurveToPoint(path, NULL, 10, 140, 80, 110, self.animationView.center.x  , self.animationView..center.y);

    [keyFrameAnimation setPath:path];

    [keyFrameAnimation setDuration:5];

    [self.animationView..layer addAnimation:keyFrameAnimation forKey:@"key"];

    这些都是动画的基本方法,想要实现复杂的想过,就需要靠自己的逻辑思维来实现了.

 

   

    

 

 

 

    

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!