从左到右的过渡屏幕?

Transition Screens from Left to Right?

我想创建一个 segue。我正在使用 Swift。我希望新的视图控制器从左侧滑入。这意味着之前的View Controller会从左向右滑出。我已经尝试过 segues Push、Replace、Present Modally 和 Present as Popover,但其中 none 执行从左到右的过渡。它们要么从右到左过渡,要么新屏幕从屏幕底部出现。如何进行从左到右的过渡?谢谢。

您可以编写一个不太困难的自定义过渡,但如果您不想走那条路,这里有一个简单的修复方法。单击 segue 和 unclick/disable 在 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,但根据您的技能水平和对动画的熟悉程度,我发现上述方法很容易实现。