从右到左 Segue,无需推送或呈现 ViewController

Segue From Right To Left Without Push Or Presenting ViewController

是否有可能在没有 push or Persenting ViewController 的情况下从 Right To Left 执行 segue。以下代码可以很好地处理动画,但如果我使用此 class,我的 TabBar 将被隐藏。如果我删除 Perform() 中的代码 TabBar 显示但动画停止 使用 MDCBottomNavigationBar

class SegueFromRight: UIStoryboardSegue {
    override func perform() {
        let src = self.source
        let dst = self.destination
        src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)

        dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,delay: 0.0,options: UIView.AnimationOptions.curveEaseInOut,animations: {
            dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },completion: { finished in
            src.navigationController?.pushViewController(dst, animated: false)
        }
        )
    }
}

有没有其他方法可以在不隐藏的情况下使用动画执行 segue TabBar

试试这个

private func setupAlwaysVisibleView() {
        guard let tabBarController = self.tabBarController else { return }

        tabBarController.view.insertSubview(alwaysVisibleView, belowSubview: tabBarController.tabBar)
    }

终于找到答案了。只需删除行 Push ViewController

class SegueFromRight: UIStoryboardSegue {
    override func perform() {
        let src = self.source
        let dst = self.destination
        src.view.superview?.insertSubview(dst.view, aboveSubview: src.view)

        dst.view.transform = CGAffineTransform(translationX: src.view.frame.size.width, y: 0)

        UIView.animate(withDuration: 0.25,delay: 0.0,options: UIView.AnimationOptions.curveEaseInOut,animations: {
            dst.view.transform = CGAffineTransform(translationX: 0, y: 0)
        },completion: { finished in
            //Remove Following line if you want to segue modally  
            //src.navigationController?.pushViewController(dst, animated: false)
        }
        )
    }
}