自定义UIStoryboardSegue和UIViewController转场之间的区别

34

我正在尝试找出自定义UIStoryboardSegue和自定义UIViewcontroller转换(在ios7中引入)之间的区别。

它们的区别和不同的用例是什么?据我所知,它们都用于自定义移动到新控制器。

可能UIViewcontroller转换更适用于仅显示并将在某个时候被解除的控制器,而segue则是完整的移动,不一定是返回。

自定义Segue
UIViewControllerTransitioningDelegate协议参考


Segue 定义了两个视图控制器之间的操作(关闭 A 并显示 B),而视图控制器转换则描述了视图控制器如何出现或消失。 - Danyun Liu
你是不是想说,segue 有一个特定的方向,而 View Controller 转换则没有特定方向,它有一个呈现和被呈现的视图控制器,并且可以将其中一个动画进或出? - StuartM
我想表达的是,segue 封装了像 [vc1 push:xxx] 或 [vc1 presentModal:xxx] 这样的操作,它是一种方便的方式来使用默认的转场(push, modal)从 v1 呈现 v2,你不需要编写这样的代码,只需调用 [self performSegueWithIdentifier:xxx]。而在我看来,转场代理允许您自定义动画效果。 - Danyun Liu
@Danyun - 谢谢,那么自定义segue是做什么的...和普通segue一样吗?它允许你自定义动画效果在操作之间吗?在我的当前应用程序中,我在storyboard中使用segue并调用self performSegueWithIdentifier,但是然后使用自定义转换进行动画。 - StuartM
对于那些通过谷歌搜索到这里的新手,有一个小提示 - 如果你刚开始学习这个,这篇文章会详细地解释如何设置它:https://dev59.com/KGAg5IYBdhLWcg3wm7_6#23403979 可以帮助你! - Fattie
2个回答

3
自定义Segue不仅用于定义呈现样式,还可以用于定义视图控制器的自定义层次结构以及呈现样式 - 这与导航或选项卡栏视图控制器不同。
仅将自定义segue用于呈现的问题在于开发人员还要负责管理视图控制器层次结构,这实际上并不是意图。
通过自定义转换API,呈现与视图控制器的管理分离。

2
这很有道理。是否有任何方法可以从自定义segue触发视图控制器转换,或者在使用自定义segue时保持分离的其他方式? - stefanlindbohm

0
如果你使用故事板转场并且想要自定义过渡效果,你可以使用自定义的UIStoryboardSegue。但是如果你使用常规的UIViewController方法来呈现新的视图控制器,你应该使用自定义的UIViewController过渡效果。在这两种情况下,你之前的视图控制器仍然存在,如果你希望的话可以返回上一个视图控制器。这只取决于你想要使用哪种方法来呈现新的视图控制器。

2
我不确定这是否正确,因为您可以在没有问题的情况下使用UIViewController转换和segues。我已经设置了一些视图控制器转换,并与它们一起使用segues,甚至是自定义转换。但是,我不知道它们之间的区别和用例。 - StuartM
可以,但我认为只有在实际使用segue时才能使用自定义的UIStoryboardSegue - Gavin
@StuartM 至少有一种情况下,您无法在故事板转场中使用UIViewControllerTransitioningDelegate。当您拥有一个具有多个子视图控制器的自定义容器视图控制器,并且您想要使用自定义segue从一个子视图控制器过渡到另一个子视图控制器并在容器控制器上正确执行-addChildViewController:时,标准的呈现转换不起作用,因为它无法处理父子关系。据我所知,您必须自己处理这个父子关系,而自定义segue是一个逻辑上合适的地方 - 但是这时就不能使用UIViewControllerTransitioningDelegate了。 - erikprice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接