2014-01-14 30 views
33

我想知道自定义UIStoryboardSegue和自定义UIViewcontroller转换(在ios7中引入)之间的差别。自定义UIStoryboardSegue和UIViewController转换之间的区别

两者有什么区别和不同用例?据我可以告诉他们都用于自定义移动到新的控制器。

可能UIViewcontroller转换更多地用于仅显示的控制器,并且某些点将被解散,而segue是完整的移动而不一定是后退?

Custom Segues
UIViewControllerTransitioningDelegate Protocol Reference

+0

Segue定义了两个视图控制器之间的动作(消除A和显示B),而视图控制器转换描述视图控制器如何出现或消除。 – x4snowman

+0

您是否想说segue具有特定的方向,而视图控制器转换不具有呈现和呈现的视图控制器并将其中一个或一个动画进行动画处理? – StuartM

+0

我的意思是'segue'封装了诸如[vc1 push:xxx]或[vc1 presentModal:xxx]之类的动作,这是一种方便的方式,通过定义默认转换(push,modal)来从v1演示v2,不需要编写这样的代码,而只需调用[self performSegueWithIdentifier:xxx]。在我看来,转换代表允许您自定义动画效果。 – x4snowman

回答

0

如果你用故事板塞格斯,你想定制的过渡,你可以使用自定义UIStoryboardSegue。但是,如果您使用常规的UIViewController方法呈现新的视图控制器,则可以使用自定义的UIViewController转换。在这两种情况下,您以前的视图控制器仍然存在,如果您愿意,您可以返回。这取决于你想用什么方法来创建一个新的视图控制器。

+2

我不确定这是否正确,因为您可以使用UIViewController Transitioning for segues而不会出现问题。我已经设置了一些视图控制器的转换,并使用segues与他们,甚至自定义转换。但是,我不知道这些和用例之间的区别。 – StuartM

+0

你可以,是的。但是我认为在实际使用segues时只能使用自定义的'UIStoryboardSegue'。 – Gavin

+0

@StuartM至少有一种情况,你不能在storyboard segues中使用UIViewControllerTransitioningDelegate。如果您有一个具有多个子项的自定义容器视图控制器,并且您希望自定义的segue从一个子项转换到另一个子项,并在容器控制器上正确执行'-addChildViewController:',则标准演示文稿转换不起作用,因为它不会处理父母。AFAICT,你必须自己做这个亲子关系,而自定义的segue是一个合乎逻辑的地方 - 但是不使用UIViewControllerTransitioningDelegate。 – erikprice

3

自定义Segues不仅用于定义表示风格,还可用于定义视图控制器的自定义层次结构以及表现风格 - 与导航或选项卡栏视图控制器不同。

仅为演示文稿使用自定义segue的问题在于,开发人员还负责管理视图控制器层次结构,这实际上并不是意图。

使用自定义转换API,演示与视图控制器的管理方式是分开的。

+2

这是有道理的。有没有什么办法来触发视图控制器从自定义赛格转换或任何其他方式保持分离时使用自定义赛格? – kolizz