呈现视图控制器太慢了

Posted

技术标签:

【中文标题】呈现视图控制器太慢了【英文标题】:Presenting View Controller is too slow 【发布时间】:2020-05-20 00:08:29 【问题描述】:

我已经在我的 Swift 应用中实现了 Firebase Google 登录。我想在开始时检查它是否已经是登录用户。我是这样做的:

override func viewDidLoad() 
        super.viewDidLoad()
        GIDSignIn.sharedInstance()?.presentingViewController = self
        GIDSignIn.sharedInstance().delegate = self

    

    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(false)

        if Auth.auth().currentUser != nil 

          let storyboard = UIStoryboard(name: "Main", bundle: nil)
          let vc = storyboard.instantiateViewController(withIdentifier: "feedVC")
          vc.modalPresentationStyle = .fullScreen
          self.present(vc, animated: false)

        
    

现在我的问题是:它按我的意愿工作,但速度很慢。在我的主页出现之前,我仍然可以快速查看登录屏幕。

现在如果我想将 currentUser 检查添加到 viewDidLoad,应用程序不会检查用户之前是否已经登录。

有什么建议吗?

【问题讨论】:

在这个问题中确实没有任何东西会以任何方式变慢,因为您没有进行任何 Firebase 网络调用或使用快速本地数据之外的任何内容。究竟什么是慢? 您问题中的代码已经在主线程上运行,因此接受的答案中提供的代码实际上并没有任何影响。但是,这可能还有更多内容,因此需要更多信息才能真正提供准确的答案。 @Jay 在我的实际 iPhone 上我没有延迟,但在模拟设备上我不知何故有小延迟。我不知道为什么。 但最后没那么重要,因为它可以在真正的 iPhone 上运行 我担心你会在未来遇到更大的问题,所以最好提前解决它而不是等待它以后爆炸,并且提供的答案不是长期解决方案因为它什么也没做。目前尚不清楚您在哪里遇到了延误,因此如果您需要更多帮助,请更新问题并提供更多信息,我们可以查看。 【参考方案1】:

在主线程上做

 override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(false)

        if Auth.auth().currentUser != nil 
    DispatchQueue.main.async 
     let storyboard = UIStoryboard(name: "Main", bundle: nil)
              let vc = storyboard.instantiateViewController(withIdentifier: "feedVC")
              vc.modalPresentationStyle = .fullScreen
              self.present(vc, animated: false)
    

【讨论】:

@janswoboda 我对这个答案感到困惑。问题中的内容已经在主线程上运行,因此添加另一个 DispatchQueue 对这个用例没有任何作用。 是的,你是对的@Jay...这不是根本原因...当他推动这个控制器时,它在某处有根本原因... 有时我也面临这个问题......转移到主线程解决它......不知道原因......这就是我提出这个解决方案的原因

以上是关于呈现视图控制器太慢了的主要内容,如果未能解决你的问题,请参考以下文章

XP启动时滚动条太慢了!

Backbone Marionette慢速复合视图(200多个系列)

如何从 merb 中的控制台/脚本运行器生成视图?

加了模糊控制器,仿真速度很慢,怎么解决

在动画呈现控制器视图的同时动画呈现控制器视图

如果从过流上下文视图控制器呈现,则呈现视图控制器错误