是否有一种简单的方法来指定" show"的方向(从左,右,上或下)。 segue(之前称为" push" segue)?
默认"显示" segue从左到右,但我希望它从下到上。
答案 0 :(得分:8)
我不相信有一种内置的实现方法,但是你可以使用iOS7中引入的自定义转换。有很多很棒的教程,我在下面添加了一些链接和一些示例代码,演示了如何从顶部向下滑动新的视图控制器。
要检查的网站:
Introduction to Custom View Controller Transitions and Animations
RayWenderlich: How To Make A View Controller Transition Animation Like in the Ping App
(注意:在第三和第四个教程中访问UIViewController
的{{1}}的方式已过时。而不是view
您应该使用toViewController.view
)
示例:
首先,你需要设置你的故事板,我假设你已经完成了。
其次,您需要一个符合transitionContext.viewForKey(UITransitionContextToViewKey)
的{{1}}子类。这将用于控制从一个视图控制器到下一个视图控制器的转换。
NSObject
如RayWenderlich: How To Make A View Controller Transition Animation Like in the Ping App教程中所述,您需要设置UIViewControllerAnimatedTransitioning
的代理人。当执行push segue时,以下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) })
}
}
类将用于返回UINavigationController
的实例:
NavigationControllerDelegate
那应该是它!为了扩展这一点,我建议你看一下Interactive Transitions。