如何在没有底层闪存的情况下显示视图之前如何执行Sese?

时间:2015-02-10 06:34:34

标签: ios swift uiviewcontroller appdelegate

我正在检查用户是否已登录。如果已登录,则跳过LoginViewController(初始视图控制器),然后转到MainViewController。

我已尝试在生命周期的无数个地方使用LoginViewController进行此检查,而不会在下层闪烁。

通过底层闪存,我的意思是你可以在MainViewController出现之前暂时看到LoginViewController。

我已经解决了这个方法,但感觉非常hacky:

在我的LoginViewController中:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    calls++

    if calls == 2 && NSUserDefaults.standardUserDefaults().objectForKey("AuthToken") != nil {
        self.performSegueWithIdentifier("loginUserNoAnim", sender: self)
    }
}

" loginUserNoAnim"是一个我没有动画创建的自定义Segue。

viewDidLayoutSubviews()在我的代码中被调用了3次。前两次,我收到警告,我的ViewController不在窗口层次结构中,类似于:Warning: Attempt to present <PSLoginViewController: 0x1fda2b40> on <PSViewController: 0x1fda0720> whose view is not in the window hierarchy!这会在UI中创建两个极快的白色闪烁。我通过检查通过call变量进行了多少次调用来摆脱它们。

现在,这是100%hacky,不可接受。

有没有办法通过使用iOS生命周期来解决这个问题?我甚至尝试过使用appdelegate方法:

 func applicationDidBecomeActive(application: UIApplication) {
        // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    }

但我仍然看到了下层闪光灯。减轻它的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我认为以下StackOverflow答案很好地解释了如何在应用程序启动时在登录和主视图控制器之间切换:

Programmatically set the initial view controller using Storyboards

请注意,如果您在应用程序中提供注销功能,则应将用户定向到登录视图控制器,因为仅在应用程序启动时检查它。