过渡画面从左到右?

时间:2018-05-19 01:17:43

标签: ios xcode uiviewcontroller segue uistoryboardsegue

我想创建一个segue。我正在使用Swift。我希望新的View Controller从左侧滑入。这意味着之前的View Controller将从左向右滑出。我尝试过segue Push,Replace,Present Modally和Present作为Popover,但没有一个做左右转换。它们要么具有从右到左的过渡,要么从屏幕底部出现新屏幕。如何进行从左到右的过渡?感谢。

1 个答案:

答案 0 :(得分:1)

你可以编写一个不会太难的自定义转换,但是如果你不想在这里走这条路,那么这是一个简单的解决方案。单击segue并取消选中/禁用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但是根据你的技能水平和动画的舒适度,我发现上面的一个简单实现。