• 使用Core Animation对象来实现动画


    转载保留原文地址:http://blog.csdn.net/kqjob/article/details/10417461,转载的

    iOS中如果使用普通的动画则可以使用UIKit提供的动画方式来实现,如果想实现更复杂的效果,则需要使用Core Animation了。

    下面详解各种类型动画的使用方式

    1、通过动画上下文使用UIKit动画

    [plain] view plaincopy
     
     
    1. -(void)animationOfUIKit  
    2. {  
    3.     UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];  
    4.     redView.backgroundColor=[UIColor redColor];  
    5.       
    6.     [self.view addSubview:redView];  
    7.     //开始动画  
    8.     [UIView beginAnimations:@"test" context:nil];  
    9.     //动画时长  
    10.     [UIView setAnimationDuration:1];  
    11.     /*  
    12.      *要进行动画设置的地方  
    13.      */  
    14.       
    15.     redView.backgroundColor=[UIColor blueColor];  
    16.     redView.frame=CGRectMake(50, 50, 200, 200);  
    17.     redView.alpha=0.5;  
    18.       
    19.       
    20.     //动画结束  
    21.     [UIView commitAnimations];  
    22. }  

    2、通过代码块使用UIKit动画

    [plain] view plaincopy
     
     
    1. -(void)animationOfBlock  
    2. {  
    3.     //初始化一个View,用来显示动画  
    4.     UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 100, 100)];  
    5.     redView.backgroundColor=[UIColor redColor];  
    6.       
    7.     [self.view addSubview:redView];  
    8.   
    9.     [UIView animateWithDuration:1 //时长  
    10.                           delay:0 //延迟时间  
    11.                         options:UIViewAnimationOptionTransitionFlipFromLeft//动画效果  
    12.                      animations:^{  
    13.                            
    14.                          //动画设置区域  
    15.                          redView.backgroundColor=[UIColor blueColor];  
    16.                          redView.frame=CGRectMake(50, 50, 200, 200);  
    17.                          redView.alpha=0.5;  
    18.                            
    19.                      } completion:^(BOOL finish){  
    20.                        //动画结束时调用  
    21.                        //............  
    22.                      }];  
    23.       
    24.       
    25. }  

    使用Core Animation对象来实现动画

    在Core Animation中我们经常使用的是

    • CABasicAnimation
    • CAKeyframeAnimation
    • CATransitionAnimation

    其中CABasicAnimationCAKeyframeAnimation是对图层中的不同属性进行动画的。

    如果要多整个图层进行动画,则应该使用CATransitionAnimation

    如果要使用组合动画,例如要改变图层的大小和透明度,则可以先为每个属性创建一个CABasicAnimation对象,再把他们组合到CAAnimationGroup中,最后把这个组合添加到要进行动画的CALayer中。

    注:CAAnimation(以及CAAnimation的子类),全部都是显式动画,这样动画播放后,表现层回恢复到模型层的原始状态,这就意味着,如果动画播放完后,会恢复到原来的样子,所以在动画播放完后要对模型层进行修改,例如:self.view.layer.backgroundColor=[UIColor blueColor].CGColor;

    1、自定义动画:CABasicAnimation

    [plain] view plaincopy
     
     
    1. -(void)animationOfCABasicAnimation  
    2. {  
    3.     //创建一个CABasicAnimation对象  
    4.     CABasicAnimation *animation=[CABasicAnimation animation];  
    5.     //设置颜色  
    6.     animation.toValue=(id)[UIColor blueColor].CGColor;  
    7.     //动画时间  
    8.     animation.duration=1;  
    9.     //是否反转变为原来的属性值  
    10.     animation.autoreverses=YES;  
    11.     //把animation添加到图层的layer中,便可以播放动画了。forKey指定要应用此动画的属性  
    12.     [self.view.layer addAnimation:animation forKey:@"backgroundColor"];  
    13.       
    14. }  

    2、关键帧动画:CAKeyframeAnimation

    1. path

    这是一个 CGPathRef  对象,默认是空的,当我们创建好CAKeyframeAnimation的实例的时候,可以通过制定一个自己定义的path来让  某一个物体按照这个路径进行动画。这个值默认是nil  当其被设定的时候  values  这个属性就被覆盖 

    2. values

    一个数组,提供了一组关键帧的值,  当使用path的 时候 values的值自动被忽略。

    下面是改变依次改变view的颜色

    [plain] view plaincopy
     
     
    1. -(void)animationOfCAKeyframeAnimation  
    2. {  
    3.     CAKeyframeAnimation *animation=[CAKeyframeAnimation animation];  
    4.     //设置属性值  
    5.     animation.values=[NSArray arrayWithObjects:  
    6.                       (id)self.view.backgroundColor,  
    7.                       (id)[UIColor yellowColor].CGColor,  
    8.                       (id)[UIColor greenColor].CGColor,  
    9.                       (id)[UIColor blueColor].CGColor,nil];  
    10.     animation.duration=3;  
    11.     animation.autoreverses=YES;  
    12.     //把关键帧添加到layer中  
    13.     [self.view.layer addAnimation:animation forKey:@"backgroundColor"];  
    14. }  



    3、使用路径制作动画:CAKeyframeAnimation

    [plain] view plaincopy
     
     
    1. -(void)animationOfCAKeyframeAnimationPath  
    2. {  
    3.     //初始化一个View,用来显示动画  
    4.     UIView *redView=[[UIView alloc]initWithFrame:CGRectMake(10, 10, 20, 20)];  
    5.     redView.backgroundColor=[UIColor redColor];  
    6.       
    7.     [self.view addSubview:redView];  
    8.       
    9.     CAKeyframeAnimation *ani=[CAKeyframeAnimation animation];  
    10.     //初始化路径  
    11.     CGMutablePathRef aPath=CGPathCreateMutable();  
    12.     //动画起始点  
    13.     CGPathMoveToPoint(aPath, nil, 20, 20);  
    14.     CGPathAddCurveToPoint(aPath, nil,   
    15.                           160, 30,//控制点  
    16.                           220, 220,//控制点   
    17.                           240, 380);//控制点  
    18.       
    19.     ani.path=aPath;  
    20.     ani.duration=10;  
    21.     //设置为渐出  
    22.     ani.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];  
    23.     //自动旋转方向  
    24.     ani.rotationMode=@"auto";  
    25.       
    26.     [redView.layer addAnimation:ani forKey:@"position"];  
    27. }  
  • 相关阅读:
    CDH6.3.1安装详细步骤(感写B站若泽大数据)
    windows远程ubuntu UI教程
    CentOS7搭建Tensorflow计算环境(cuda+cudnn+jupyterlab(Anaconda3)+pytorch+Tensorflow)
    中国计算机学会推荐国际学术会议和期刊目录-2019
    基于BA网络模型的二部图数据集生成
    GitHub文件的克隆与上传
    博客园中随笔,文章的区别
    Pycharm新建文件时头部模板的配置方法
    asyncio 和aiohttp
    随机UA
  • 原文地址:https://www.cnblogs.com/liuting-1204/p/5748021.html
Copyright © 2020-2023  润新知