我想创建一个segue。我正在使用Swift。我希望新的View Controller从左侧滑入。这意味着以前的View Controller将从左向右滑出。我已经尝试过segue的“推”,“替换”,“模态呈现”和“呈现为弹出框”,但是它们都不执行从左到右的过渡。它们要么具有从右到左的过渡,要么从屏幕底部出现新屏幕。如何进行从左到右的过渡?谢谢。

最佳答案

您可以编写一个自定义过渡,这不会太困难,但是如果您不想走那条路线,这里的简单修复将起作用。单击序列,然后取消/禁用动画。然后在prepareForSegue中使用它。

  override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let _ = segue.destination as? NextViewController{
            let trans = CATransition()
            trans.type = kCATransitionMoveIn
            trans.subtype = kCATransitionFromLeft
            trans.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
            trans.duration = 0.35
            self.navigationController?.view.layer.add(trans, forKey: nil)
        }
    }

随时使用CATransition types探索其他选项。您可以和他们一起玩得很开心。现在,我想您希望在下一个视图控制器中按下后退按钮的操作与此相反。您将不得不替换“后退”按钮并拦截没有动画的后退按下并弹出,因此您可以添加自己的动画。这是什么样子。
 override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(backTapped))
}

@objc func backTapped() {
    let trans = CATransition()
    trans.type = kCATransitionMoveIn
    trans.subtype = kCATransitionFromRight
    trans.duration = 0.3
    self.navigationController?.view.layer.add(trans, forKey: nil)
    navigationController?.popViewController(animated: false)
}

同样,另一个选择是使用UIViewControllerAnimatedTransitioning,但是根据您的技术水平和对动画的舒适度,我发现上述方法很容易实现。

关于ios - 从左到右过渡屏幕?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50420919/

10-11 00:14