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

Posted

技术标签:

【中文标题】指定“show”(推)segue 的方向【英文标题】:Specify direction of "show" (push) segue 【发布时间】:2015-05-30 22:17:18 【问题描述】:

有没有一种简单的方法来指定“show”segue(以前称为“push”segue)的方向(从左、右、上或下)?

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

【问题讨论】:

【参考方案1】:

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

要查看的网站:

WWDC 2013 - Custom Transitions Using View Controllers

Animated Transitions in Swift / iOS8

Introduction to Custom View Controller Transitions and Animations

RayWenderlich: How To Make A View Controller Transition Animation Like in the Ping App

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

一个例子:

首先,您需要设置故事板,我假设您已经完成了。

其次,您需要一个符合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: How To Make A View Controller Transition Animation Like in the Ping App 教程中所述,您需要设置UINavigationController 的委托。当执行 push segue 时,以下 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
    

应该就是这样!要对此进行扩展,我建议您查看 Interactive Transitions。

【讨论】:

以上是关于指定“show”(推)segue 的方向的主要内容,如果未能解决你的问题,请参考以下文章

Segue 错误 - 未能在 nsmanagedobject 类上调用指定的初始化程序

segueing 时的核心数据错误:无法在 NSManagedObject 类上调用指定的初始化程序

segueing时出现核心数据错误:无法在NSManagedObject类上调用指定的初始值设定项

IOS/Objective-C:导航栏自定义Segue效果对比Show Segue

python tkinter 基本使用

CSS 指定溢出方向 应该如何设置?