自定义 UIStoryboardSegue 和 UIViewController 转换之间的区别
Posted
技术标签:
【中文标题】自定义 UIStoryboardSegue 和 UIViewController 转换之间的区别【英文标题】:Difference between a custom UIStoryboardSegue and UIViewController transition 【发布时间】:2014-02-02 21:51:37 【问题描述】:我试图找出自定义 UIStoryboardSegue
和自定义 UIViewcontroller
转换(在 ios7 中引入)之间的区别。
两者有什么区别和不同的用例?据我所知,它们都用于自定义移动到新控制器。
可能UIViewcontroller
转换更多地用于仅显示的控制器,并且某些点会被忽略,而segue 是一个完整的移动而不一定是一个后退?
Custom SeguesUIViewControllerTransitioningDelegate Protocol Reference
【问题讨论】:
Segue 定义了两个视图控制器之间的动作(关闭 A 和显示 B),而视图控制器转换描述了视图控制器如何出现或关闭。 你是想说一个segue有一个特定的方向,而一个视图控制器转换没有一个呈现和呈现的视图控制器,或者动画一个进或出? 我的意思是segue
封装了诸如[vc1 push:xxx]或[vc1 presentModal:xxx]之类的动作,这是一种方便的方法,可以通过默认过渡(push, modal) 定义的,你不需要写这样的代码,只需调用 [self performSegueWithIdentifier:xxx]。而且在我看来,过渡委托允许您自定义动画效果。
@Danyun - 谢谢,自定义 segue 有什么作用......同样的?允许您自定义动作之间的动画效果吗?在我当前的应用程序中,我在情节提要中使用 segue 并按照建议调用 self performSegueWithIdentifier
,然后为动画使用自定义过渡。
对于任何在此处搜索的人来说都是一个小问题 - 如果您刚刚进入这里,这里有一个关于如何设置它的长长解释..***.com/a/23403979/294884 可能会有所帮助!
【参考方案1】:
自定义 Segue 不仅用于定义呈现样式,还可以用于定义视图控制器的自定义层次结构以及呈现样式——这与导航或标签栏视图控制器不同。
使用自定义 segue 仅用于演示的问题是开发人员还负责管理视图控制器层次结构,这实际上不是意图。
使用自定义转换 API,呈现与视图控制器的管理方式是分开的。
【讨论】:
这是有道理的。是否有任何方法可以触发视图控制器从自定义 segue 转换或使用自定义 segue 时保持分离的任何其他方式?【参考方案2】:如果您使用故事板转场并且想要自定义过渡,则可以使用自定义 UIStoryboardSegue
。但是,如果您使用常规 UIViewController 方法来呈现新的视图控制器,您将使用自定义 UIViewController
转换。在这两种情况下,您之前的视图控制器仍然存在,如果您愿意,您可以返回。这仅取决于您要使用哪种方法来调出新的视图控制器。
【讨论】:
我不确定这是否正确,因为您可以毫无问题地将 UIViewController 过渡与 segues 一起使用。我已经设置了一些视图控制器转换,并结合使用 segues,甚至是自定义转换。但是,我不知道这些和用例之间的区别。 你可以,是的。但我认为你只能在实际使用 segues 时使用自定义UIStoryboardSegue
。
@StuartM 至少在一种情况下,您不能将 UIViewControllerTransitioningDelegate 与情节提要 segues 一起使用。当您有一个具有多个子级的自定义容器视图控制器,并且您希望自定义 segue 从一个子级过渡到另一个子级并在容器控制器上正确执行 -addChildViewController:
时,标准的演示文稿过渡不起作用,因为它不会t 处理育儿问题。 AFAICT,你必须自己做这个育儿,自定义 segue 是一个合乎逻辑的地方 - 但是不使用 UIViewControllerTransitioningDelegate。以上是关于自定义 UIStoryboardSegue 和 UIViewController 转换之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UIStoryboardSegue 使用 segueWithIdentifier:source:destination:performHandler:
UIStoryboardSegue & UIVisualEffectView - 完成块退出后模糊效果丢失