UIViewController的一些属性(CATrasition转场动画)

汪甫
2023-12-01

1.基本概念

   //1.svc添加为当前视图控制器的子视图控制器

    [self addChildViewController:svc];

    [svc release];

    

    //2.查看当前视图控制器的子视图控制器 --> 数组

    NSArray *childArr = self.childViewControllers;

    NSLog(@"childArr = %@",childArr);

 

  //显示子视图控制器的视图

    NSArray *arr = self.childViewControllers;

    //找到需要做处理的视图控制器

    SecondViewController *svc = (SecondViewController *)[arr objectAtIndex:0];

    [self.view addSubview:svc.view];

    //removeFromSuperview&removeFromParentViewController

    [svc.view removeFromSuperview];

    //移除子视图控制器:移除后,原来的子视图控制器(svc)就不在当前视图控制器(self)的子视图控制器数组(self.childViewControllers)中了。

    [svc removeFromParentViewController];

    NSArray *arr1 = self.childViewControllers;

    NSLog(@"arr1 = %@",arr1);

 

2.转场动画

// 转场动画 (layer层的动画)

- (void)buttonClick:(UIButton *)button

{

    SecondViewController *svc = [[SecondViewController allocinit];

    /*

     增加一个转场特效

     xcode5 之前 需要导入QuartzCore.framework

     导入头文件 <QuartzCore/QuartzCore.h>

     xcode5之后 不需要导入 直接就可以用

     */

    //首先创建一个转场动画对象

    CATransition *animation = [CATransition animation];

    /*

     1.全局变量的形式

          kCATransitionFade   交叉淡化过渡

          kCATransitionMoveIn 新视图移到旧视图上面

          kCATransitionPush   新视图把旧视图推出去

          kCATransitionReveal 将旧视图移开,显示下面的新视图

     

      2.用字符串表示

     fade     //交叉淡化过渡(不支持过渡方向)

     push     //新视图把旧视图推出去

     moveIn   //新视图移到旧视图上面

     reveal   //将旧视图移开,显示下面的新视图

     cube     //立方体翻滚效果

     oglFlip  //上下左右翻转效果

     suckEffect   //收缩效果,如一块布被抽走(不支持过渡方向)

     rippleEffect //滴水效果(不支持过渡方向)

     pageCurl     //向上翻页效果

     pageUnCurl   //向下翻页效果

     cameraIrisHollowOpen  //相机镜头打开效果(不支持过渡方向)

     cameraIrisHollowClose //相机镜头关上效果(不支持过渡方向)

 

    //设置动画类型

    animation.type = @"oglFlip";//字符串形式

    //animation.type = kCATransitionFade;//可以写成全局变量的形式

    //设置动画方向

    /*

     全局变量形式 

     kCATransitionFromBottom

     kCATransitionFromLeft

     kCATransitionFromRight

     kCATransitionFromTop

     /字符串常量形式:

     fromLeft

     fromRight

     fromTop

     fromBottom

     */

    animation.subtype = @"fromLeft";//字符串常量

    //animation.subtype = kCATransitionFromLeft;//全局变量形式

    

    /*

     

     kCAMediaTimingFunctionLinear 线性(匀速)

     kCAMediaTimingFunctionEaseIn 先慢

     kCAMediaTimingFunctionEaseOut 后慢

     kCAMediaTimingFunctionEaseInEaseOut 先慢 后慢 中间快

     kCAMediaTimingFunctionDefault 默认

     */

    

    //设置动画的节奏

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];

    //设置动画时间

    animation.duration = 3;

    //把这个转场动画对象添加到一个视图的layer

    //把这个转场动画对象添加到导航控制器的viewlayer

    //这个转场动画 执行完之后 会自动的把这个动画删除

    // 将动画,添加到视图的layer上。

    // 我们是要导航控制器切换视图,所以,添加在导航控制器的view上,如果是模态视图,添加到self.view.layer就可以了!

    [self.navigationController.view.layer addAnimation:animation forKey:nil];

    [self.navigationController pushViewController:svc animated:YES];

    [svc release];

}

 

 

- (void)btn:(UIButton *)btn{

    CATransition *animation = [CATransition animation];

    animation.type = @"suckEffect";

    animation.subtype = @"fromLeft";

    animation.duration = 3;

    animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];

    //viewlayer 增加一个转场动画效果

    [_view.layer addAnimation:animation forKey:nil];

}

 类似资料: