我怎样才能延迟执行带有标识符的 Segue

how can I delay perform Segue with identifier

我有 RouteVC,我正在通过它控制 Auth.. 要么将用户切换到 AppVC,要么将他转移到 Auth 页面。

在执行 App 和 Auth apges 之间的移动时,我想要一些延迟在 RouteVC 中显示一些动画或消息

那你能帮我看看ViewControllers之间的延迟怎么做吗?

class Route: UIViewController{

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(true)

    Auth.auth().addStateDidChangeListener { (auth, user) in
        if user == nil {
            // User Signed out
            self.performSegue(withIdentifier: "Auth", sender: nil)
        } else {
            // User Signed In
            self.performSegue(withIdentifier: "App", sender: nil)

        }
    }

}

使用DispatchQueueasyncAfter方法延迟调用任何代码。 closure/block 中的任何内容都将在您指定的延迟后执行,在下面的例子中,我将其设置为距当前时间 2 秒。

DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
    // Your code to execute after a delay of 2 seconds.
    // Before calling asyncAfter perform showing loader or anything you want.
}

我对@badhanganesh 的回答投了赞成票,但想提一下 UIView.animate 有一个完成块。您可以使用完成块在某事完成后执行代码,而不是 运行 2 秒动画和 2 秒 asyncAfter 延迟(这是不可靠的)。

// run a 0.5 second animation
UIView.animate(withDuration: 0.5, animations: {
    // your animations
}, completion: { _ in
    // show your view controller once the animation is completed

    // if you want to further delay, use asyncAfter
    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
        // code excutes after 2 seconds
    }
})

同样,您可以为处理显示动画或消息的自定义函数创建完成处理程序。