指定“show”(推)segue的方向

有没有一个简单的方法来指定“show”segue(以前称为“push”segue)的方向(从左,右,顶部或底部)?

默认的“show”segue从左到右,但是我希望它从下到上。

我不认为有一个内置的方法来实现,但是你可以使用iOS7中引入的自定义转换。 这里有很多很棒的教程,我在下面添加了一些链接以及一些示例代码,演示了如何从顶部滑动新的视图控制器。

要检查的站点:

  • WWDC 2013 – 使用视图控制器的自定义转换

  • Swift / iOS8中的animation转换

  • 自定义视图控制器转换和animation简介

  • RayWenderlich:如何使视图控制器过渡animation像在平板应用程序

(注意:在第三和第四个教程中访问UIViewController view的方式已经过时,而不是toViewController.view ,应该使用transitionContext.viewForKey(UITransitionContextToViewKey)

一个例子:

首先,你将需要build立你的故事板,我将假设你已经完成了。

其次,你需要一个符合UIViewControllerAnimatedTransitioningNSObject子类。 这将被用来控制从一个视图控制器到下一个的转换。

 class TransitionManager : NSObject, UIViewControllerAnimatedTransitioning { let animationDuration = 0.5 func transitionDuration(transitionContext: UIViewControllerContextTransitioning) -> NSTimeInterval { return animationDuration } func animateTransition(transitionContext: UIViewControllerContextTransitioning) { let containerView = transitionContext.containerView() let toView = transitionContext.viewForKey(UITransitionContextToViewKey)! containerView.addSubview(toView) let finalFrame = containerView.bounds let initalFrame = CGRect(x: 0, y: -finalFrame.height, width: finalFrame.width, height: finalFrame.height) toView.frame = initalFrame UIView.animateWithDuration(animationDuration, animations: { toView.frame = finalFrame }, completion: { _ in transitionContext.completeTransition(true) }) } } 

正如RayWenderlich所述:如何制作视图控制器转换animation就像在Ping App教程中一样,您需要设置您的UINavigationController的代表。 下面的NavigationControllerDelegate类将用于返回TransitionManager一个实例:

 class NavigationControllerDelegate: NSObject, UINavigationControllerDelegate { let transitionManager = TransitionManager() func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { if operation == .Push { return transitionManager } return nil } } 

这应该是! 为了扩大这一点,我build议你看看互动转换。