【问题标题】:iOS push style segue transitioniOS推送风格segue过渡
【发布时间】:2025-12-23 12:20:55
【问题描述】:

当我的导航视图控制器推送另一个视图控制器时,我想更改它的“从右向左滑动”过渡。我在故事板中找到了一个选项,但它似乎不起作用。过渡风格还是一样的。 通过单击情节提要中的目标视图控制器,我发现了这一点,尽管看起来过渡是针对模态样式的:

所以,我的问题是,是否有可能让 push 风格的 segue 过渡看起来不同?如果是这样,如何?

【问题讨论】:

    标签: ios uinavigationcontroller navigation styles transition


    【解决方案1】:

    您可以在自定义 Segue 中使用 CATransition 来实现任何类型的过渡。这是示例代码。

    -(void)perform {
    
    __block UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
    __block UIViewController *destinationController = (UIViewController*)[self destinationViewController];                    
    
    CATransition* transition = [CATransition animation];
    transition.duration = .25;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush; //kCATransitionMoveIn; //, kCATransitionPush, kCATransitionReveal, kCATransitionFade
    transition.subtype = kCATransitionFromLeft; //kCATransitionFromLeft, kCATransitionFromRight, kCATransitionFromTop, kCATransitionFromBottom
    
    
    
    [sourceViewController.navigationController.view.layer addAnimation:transition
                                                forKey:kCATransition];
    
    [sourceViewController.navigationController pushViewController:destinationController animated:NO];    
    
    
    }
    

    您可以访问此链接了解更多详情http://blog.jambura.com/2012/07/05/custom-segue-animation-left-to-right-using-catransition/

    【讨论】:

    • 很好的答案兄弟...我找了很长时间:-)
    【解决方案2】:

    为了实现推送转换,您需要使用 UINavigationController 连接您的视图。这些都是一次性转换的模态转换选项。

    出于同样的原因,至少在情节提要中,如果您已经在使用 UINavigationController,那么除了推送之外,您不能使用任何其他东西。

    我发现解决此限制的最简单方法是在代码中执行此操作,并在 UIView 动画或 CAAnimation 中包装没有动画的推送。

    【讨论】: