指定"show"(推)segue的方向

Jak*_*san 7 objective-c ios segue swift

是否有一种简单的方法来指定"show"segue(以前称为"push"segue)的方向(从左,右,顶部或底部)?

默认的"show"segue从左到右,但我希望它从下到上.

ABa*_*ith 8

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

要检查的网站:

(注:该方式UIViewControllerview在第三和第四教程是过时的访问相反的,toViewController.view你应该使用transitionContext.viewForKey(UITransitionContextToViewKey))

一个例子:

首先,你需要设置你的故事板,我假设你已经完成了.

其次,您需要一个NSObject符合的子类UIViewControllerAnimatedTransitioning.这将用于控制从一个视图控制器到下一个视图控制器的转换.

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) })
    }
}
Run Code Online (Sandbox Code Playgroud)

RayWenderlich:如何制作视图控制器转换动画一样,在Ping应用教程中,您需要设置一个您UINavigationController的委托.以下NavigationControllerDelegate类将用于返回执行TransitionManagerpush segue 的实例:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该是它!为了扩展这一点,我建议你看一下Interactive Transitions.