推动和弹出segue动画的反向?

时间:2015-08-29 16:42:18

标签: ios swift uinavigationcontroller segue

我的根视图控制器左侧有一个按钮,触发推送到另一个视图控制器。我想推动segue从左侧向右侧滑动;我也希望pop动画(对于这个视图控制器)从右到左。

我能够使用此代码为推送创建自定义segue以制作所需的动画:

import UIKit

class LeftToRightSegue: UIStoryboardSegue {

    override func perform() {
        let src: UIViewController = self.sourceViewController 
        let dst: UIViewController = self.destinationViewController

        let finalFrame  = src.view.bounds
        let initalFrame = CGRect(x: -finalFrame.width, y: 0, width: finalFrame.width, height: finalFrame.height)

        dst.view.frame = initalFrame
        UIView.animateWithDuration(0.25, animations: { dst.view.frame = finalFrame })
        src.navigationController!.pushViewController(dst, animated: false)
    }
}

然后我尝试使用以下代码为pop创建一个segue:

import UIKit

class RightToLeftSegue: UIStoryboardSegue {

    override func perform() {
        let src: UIViewController = self.sourceViewController
        let dst: UIViewController = self.destinationViewController

        let finalFrame  = src.view.bounds
        let initalFrame = CGRect(x: 2*finalFrame.width, y: 0, width: finalFrame.width, height: finalFrame.height)

        dst.view.frame = initalFrame
        UIView.animateWithDuration(0.25, animations: { dst.view.frame = finalFrame })
        dst.navigationController!.popViewControllerAnimated(false)
    }
}

但是我收到了错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

在这一行:

dst.navigationController!.popViewControllerAnimated(false)

因为导航控制器(由于某种原因)为零。

我想要的只是推动和弹出的动画被颠倒,无论它是否与自定义segues无关。有谁知道如何修复这个实现,或者创建一个更好的实现?

更新:我发现了一个非常糟糕的流行音乐解决方案:

let main = self.navigationController!.viewControllers.first!
self.navigationController!.viewControllers.removeAtIndex(0)
self.navigationController!.pushViewController(main, animated: true)
self.navigationController!.viewControllers.removeAtIndex(0)

我绝对愿意接受更好的解决方案。

0 个答案:

没有答案