指定“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立你的故事板,我将假设你已经完成了。
其次,你需要一个符合UIViewControllerAnimatedTransitioning
的NSObject
子类。 这将被用来控制从一个视图控制器到下一个的转换。
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议你看看互动转换。