过渡画面从左到右?

问题描述 投票:0回答:1

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

ios xcode uiviewcontroller segue uistoryboardsegue
1个回答
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,但根据你的技术水平和动画的舒适度,我发现上面的一个简单的实现。

© www.soinside.com 2019 - 2024. All rights reserved.