CoreAnimation动画

在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. }  


你可能感兴趣的:(CoreAnimation动画)