【问题标题】:Push segue custom animation (Navigation controller)推送 segue 自定义动画(导航控制器)
【发布时间】:2015-08-21 11:03:31
【问题描述】:

我有这个故事板:

TabBarController : Tab1 > NavigationController > VC1 > VC2 > VC3

// VC1.m
[self performSegueWithIdentifier:@"VC2" sender:self];

// VC2.m
[self performSegueWithIdentifier:@"VC3" sender:self];

我希望 VC1 和 VC2 之间的过渡是一个淡入淡出动画,但 VC2 和 VC3 之间的过渡是默认的。

但我必须做一个 push segue 而不是模态来保持 UINavigationController 的好处(除非我错过了什么)。我为此找到的所有解决方案都使用presentViewController

【问题讨论】:

    标签: ios


    【解决方案1】:

    试试这个CATransition

     CATransition *transition = [CATransition animation];
     transition.duration = 0.3;
     transition.type = kCATransitionFade;
    
     [navigationController.view.layer addAnimation:transition forKey:kCATransition];
     isPush ? [navigationController pushViewController:viewController animated:NO] : [navigationController popViewControllerAnimated:NO];
    

    【讨论】:

      【解决方案2】:

      如果您坚持使用 segue,那么我认为有两种方法:

      1) 使用 UIViewControllerAnimatedTransitioning 协议,按照你喜欢的方式自定义转场。

      2) 编写自定义 UIStoryboardSegue

      或者通过操纵控制器及其视图和帧来执行您自己的转换和动画,例如:

      - (void)transitionToChildViewController:(UIViewController *)toViewController {
      
      UIViewController *fromViewController = ([self.childViewControllers count] > 0 ? self.childViewControllers[0] : nil);
      if (toViewController == fromViewController || ![self isViewLoaded]) {
          return;
      }
      
      UIView *toView = toViewController.view;
      [toView setTranslatesAutoresizingMaskIntoConstraints:YES];
      toView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
      toView.frame = self.privateContainerView.bounds;
      
      [fromViewController willMoveToParentViewController:nil];
      [self addChildViewController:toViewController];
      [self.privateContainerView addSubview:toView];
      [fromViewController.view removeFromSuperview];
      [fromViewController removeFromParentViewController];
      [toViewController didMoveToParentViewController:self];
      

      }

      最后一种方法可能是最乏味的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-21
        • 2019-12-29
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        相关资源
        最近更新 更多