使用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. }  
posted @ 2016-08-08 09:19  柳仙慧子  阅读(144)  评论(0编辑  收藏  举报