iOS Controller中视图切换动画效果

最近在一个小项目中遇到一个动画切换的效果,一时被难到了,后来又去看了下苹果公司提供的动画类,找到了几个动画的执行方法,这些默认的动画方法足够满足一般需求的动画效果了,接下来贴代码

首先我们在Controller中创建对应的按钮按钮

CGFloat mainHeight = [UIScreen mainScreen].bounds.size.height;

    NSArray *titleArr = @[@"添加",@"翻页",@"移入",@"揭开",@"立方体",@"收缩",@"翻转",@"水波"];

    for (int i = 0; i < 8; i ++) {

        UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];

        button.tag = 100 + i;

        [button setTitle:titleArr[i] forState:UIControlStateNormal];

        //每行四个button

        NSInteger row = i / 4;

        NSInteger col = i % 4;

[button addTarget:self action:@selector(changePageAnimation:) forControlEvents:UIControlEventTouchUpInside];

        button.frame = CGRectMake(5 + col * 80,mainHeight - (2 - row) * 45 - 20 , 70, 40);

        [self.view addSubview:button];

    }

创建好按钮后我们就可以添加一些视图控件了,这里我添加了两个UIView作为演示用:

UIView *purpleView = [[UIView alloc] initWithFrame:self.view.bounds];

    purpleView.backgroundColor = [UIColor purpleColor];

    [self.view addSubview:purpleView];

    UIView *blackView = [[UIView alloc] initWithFrame:self.view.bounds];

    blackView.backgroundColor = [UIColor blackColor];

    [self.view addSubview:blackView];

这里要注意UIView的层级关系

接下来是按钮的点击方法,我这里使用tag值来取当前button

- (void)changePageAnimation:(UIButton *)sender

{

    switch (sender.tag) {

        case 100:

        {

            // 开始执行动画

            [UIView beginAnimations:@"animation" context:nil];

            [UIView setAnimationDuration:1.0f];

            // 控制UIView内过渡动画的类型

            [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown

                                   forView:self.view cache:YES];

            // 设置动画的变化曲线

            [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

            [self.view exchangeSubviewAtIndex:3 withSubviewAtIndex:2];

            // 提交动画

            [UIView commitAnimations];

        }

            break;

        case 101:

        {

            // 开始执行动画

            [UIView beginAnimations:@"animation" context:nil];

            [UIView setAnimationDuration:1.0f];

            // 控制UIView内过渡动画的类型

            [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp

                                   forView:self.view cache:YES];

            // 设置动画的变化曲线

            [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:3 withSubviewAtIndex:2];

            

            [UIView commitAnimations];

        }

            break;

        case 102:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 2.0f;

            // 使用kCATransitionMoveIn动画

            transition.type = kCATransitionMoveIn;

            // 指定动画方向,从左向右

            transition.subtype = kCATransitionFromLeft;

            [self.view.layer addAnimation:transition forKey:@"animation"];

            [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];

        }

            break;

        case 103:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 2.0f;

            // 使用kCATransitionReveal动画

            transition.type = kCATransitionReveal;

            // 指定动画方向,从上到下

            transition.subtype = kCATransitionFromLeft;

            [self.view.layer addAnimation:transition forKey:@"animation"];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];

        }

            break;

        case 104:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 2.0f;

            // 使用@"cube"动画

            transition.type = @"cube";

            // 指定动画方向,从左到右

            transition.subtype = kCATransitionFromLeft;

            [self.view.layer addAnimation:transition forKey:@"animation"];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];

        }

            break;

        case 105:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 2.0f;

            // 使用@"suck"动画, 该动画与动画方向无关

            transition.type = @"suckEffect";

            [self.view.layer addAnimation:transition forKey:@"animation"];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];

        }

            break;

        case 106:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 0.5f;

            // 使用@"oglFlip"动画

            transition.type = @"oglFlip";

            // 指定动画方向为上下翻转

            transition.subtype = kCATransitionFromTop;

            [self.view.layer addAnimation:transition forKey:@"animation"];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:3];

        }

            break;

        case 107:

        {

            CATransition *transition = [CATransition animation];

            transition.duration = 2.0f;

            // 使用@"rippleEffect"动画,该动画与方向无关

            transition.type = @"rippleEffect";

            [self.view.layer addAnimation:transition forKey:@"animation"];

            // 交换视图控制器所显示的UIView中中2个子控件位置

            [self.view exchangeSubviewAtIndex:2 withSubviewAtIndex:3];

        }

            break;

        default:

            break;

    }

}

最终的实现效果是这样的



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值