【问题标题】:How to change transition style for popToRootViewController?如何更改 popToRootViewController 的过渡样式?
【发布时间】:2014-10-20 16:01:57
【问题描述】:

我有一个基于导航的应用程序,我在其中推送多个视图控制器(正常从右到左)来创建事件。当用户到达最后一个屏幕并创建事件时,我调用...

[self.navigationController popToRootViewControllerAnimated:YES]; 

...返回第一个屏幕。这行得通,但是当过渡动画只是简单的从左到右时。

有没有办法将转换样式更改为仅针对 popToRootViewController 的从左到右以外的其他样式?我希望它看起来与返回上一个屏幕不同。

【问题讨论】:

    标签: ios animation uinavigationcontroller


    【解决方案1】:

    希望对你有帮助!

    [CATransaction begin];
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

    CATransition *transition = [CATransition animation];
    [transition setType:kCATransitionFade];
    [self.navigationController.view.layer addAnimation:transition forKey:@"someAnimation"];

    [self.navigationController popViewControllerAnimated:YES];
    [CATransaction commit];

    【讨论】:

      【解决方案2】:

      假设我们讨论的是 iOS 7+,您需要在导航控制器中实现 UINavigationControllerDelegate 协议。从那里开始,使用 navigationController:animationControllerForOperation:fromViewController:toViewController: 提供一个符合 UIViewControllerAnimatedTransitioning 的对象,该对象将执行您的自定义动画。您可以查看UINavigationControllerDelegate 文档了解更多信息。

      【讨论】:

        【解决方案3】:

        我猜你可以做你自己的方法而不是调用popToRootViewController(通过子类化UINavigationController,或者做一个类别或任何你想要的)

        并做类似的事情(代码会根据你将在哪里实现而有所不同,但这里是想法):

        UIViewController *rootVC = self.navigationController.topViewController;
        [UIView animateWithDuration:1 animations:^{
            // Have fun doing what you want with the rootview
            [self.view addSubview:rootVC.view];
        } completion:^(BOOL finished) {
            [self.navigationController popToRootViewControllerAnimated:NO];
        }];
        

        【讨论】:

          猜你喜欢
          • 2015-03-17
          • 1970-01-01
          • 2016-12-28
          • 2017-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-05-01
          • 2022-12-14
          相关资源
          最近更新 更多