详解IOS图层转场动画

2020-01-14 20:11:48王冬梅
这篇文章主要为大家详细介绍了IOS图层转场动画, CATransition类实现层的转场动画,能够为层提供移出屏幕和移入屏幕的动画效果,感兴趣的小伙伴们可以参考一下  

CAAnimation的子类,用于做转场动画,能够为层提供移出屏幕和移入屏幕的动画效果。iOS比Mac OS X的转场动画效果少一点
UINavigationController就是通过CATransition实现了将控制器的视图推入屏幕的动画效果
属性解析:

  • type:动画过渡类型
  • subtype:动画过渡方向
  • startProgress:动画起点(在整体动画的百分比)
  • endProgress:动画终点(在整体动画的百分比)

    具体代码:

    
    /* 过渡效果
     fade   //交叉淡化过渡(不支持过渡方向) kCATransitionFade
     push   //新视图把旧视图推出去 kCATransitionPush
     moveIn  //新视图移到旧视图上面  kCATransitionMoveIn
     reveal  //将旧视图移开,显示下面的新视图 kCATransitionReveal
     cube   //立方体翻滚效果
     oglFlip //上下左右翻转效果
     suckEffect  //收缩效果,如一块布被抽走(不支持过渡方向)
     rippleEffect //滴水效果(不支持过渡方向)
     pageCurl   //向上翻页效果
     pageUnCurl  //向下翻页效果
     cameraIrisHollowOpen //相机镜头打开效果(不支持过渡方向)
     cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)
    */
      
    /* 过渡方向
     kCATransitionFromRight
     kCATransitionFromLeft
     kCATransitionFromBottom
    
    
    
    //转场动画--》是针对某个view的图层进行转场动画
    #import "ViewController.h"
    #import <QuartzCore/QuartzCore.h>
    
    @interface ViewController ()
    {
      UIView *_lastview;
      BOOL flag;
    }
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad
    {
      [super viewDidLoad];
      flag=true;
      UIView *view=[[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 200)];
      view.backgroundColor=[UIColor redColor];
      [self.view addSubview:view];
      [view release];
      _lastview=view;
      // Do any additional setup after loading the view, typically from a nib.
    }
    
    -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
      if(flag){
        _lastview.backgroundColor=[UIColor yellowColor];
        flag=false;
      
      }
      else{
        _lastview.backgroundColor=[UIColor redColor];
        flag=true;
      }
      
      //转场动画--就是对某个view进行动画切换。
      //1:如果是控制器之间的切换,其实window上view进行切换
      CATransition *transion=[CATransition animation];
      //设置转场动画的类型
      transion.type=@"pageCurl";
      //设置转场动画的方向
      transion.subtype=@"fromLeft";
      
      //把动画添加到某个view的图层上
      [self.view.layer addAnimation:transion forKey:nil];
      
    }