Ios 在视图出现之前,如果没有下层闪光灯,我如何执行检查?
我正在检查是否有用户登录。如果已登录,则跳过LoginViewController初始视图控制器,转到MainViewController 我曾尝试在生命周期中的无数地方,在LoginViewController中进行此检查,但没有底层闪烁 通过在图层下闪烁,我的意思是你可以在MainViewController出现之前的一瞬间看到LoginViewController 我已经用一种方法解决了这个问题,但感觉非常粗糙: 在我的LoginViewController中:Ios 在视图出现之前,如果没有下层闪光灯,我如何执行检查?,ios,swift,uiviewcontroller,appdelegate,Ios,Swift,Uiviewcontroller,Appdelegate,我正在检查是否有用户登录。如果已登录,则跳过LoginViewController初始视图控制器,转到MainViewController 我曾尝试在生命周期中的无数地方,在LoginViewController中进行此检查,但没有底层闪烁 通过在图层下闪烁,我的意思是你可以在MainViewController出现之前的一瞬间看到LoginViewController 我已经用一种方法解决了这个问题,但感觉非常粗糙: 在我的LoginViewController中: override func
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
calls++
if calls == 2 && NSUserDefaults.standardUserDefaults().objectForKey("AuthToken") != nil {
self.performSegueWithIdentifier("loginUserNoAnim", sender: self)
}
}
loginUserNoAnim是我创建的自定义Segue,没有动画
viewDidLayoutSubviews在我的代码中被调用了3次。前两次,我收到的警告是我的ViewController不在窗口层次结构中,类似于:警告:尝试在不在窗口层次结构中的视图上显示!这会在UI中产生两次极快的白色闪烁。我通过检查通过call变量进行了多少次调用来摆脱它们
现在,这是100%黑客和不可接受的
有没有办法通过使用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.
}
但我仍然看到下层的闪光。缓解此问题的最佳方法是什么?我认为下面的StackOverflow答案很好地解释了如何在应用程序启动时在登录和主视图控制器之间切换:
请注意,如果您在应用程序中提供注销功能,则应将用户定向到登录视图控制器,因为它仅在应用程序启动时被选中 事实上,我的黑客是有缺陷的,因为你仍然看到它,但几乎没有0.01秒。。。但同样的,它是存在的。这些方法的问题是它们没有显式地使用segue。出于某种原因,我需要使用segue。我也宁愿通过iOS的生命周期来管理它