Swift 在SceneDelegate中启动和第一个ViewController之间黑屏闪烁
我正在使用SceneDelegate.swift来决定使用以下代码显示哪个ViewController:Swift 在SceneDelegate中启动和第一个ViewController之间黑屏闪烁,swift,uiviewcontroller,Swift,Uiviewcontroller,我正在使用SceneDelegate.swift来决定使用以下代码显示哪个ViewController: guard let windowScene = (scene as? UIWindowScene) else { return } if Auth.auth().currentUser != nil { AuthenticationService.automaticSignIn(onSuccess: { let window = UIWi
guard let windowScene = (scene as? UIWindowScene) else { return }
if Auth.auth().currentUser != nil {
AuthenticationService.automaticSignIn(onSuccess: {
let window = UIWindow(windowScene: windowScene)
self.window = window
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Login", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "TabBarControllerID") as! TabBarController
window.rootViewController = newViewcontroller
window.makeKeyAndVisible()
}, onError: {
let window = UIWindow(windowScene: windowScene)
self.window = window
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Login", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "LoginViewControllerID") as! LoginViewController
window.rootViewController = newViewcontroller
window.makeKeyAndVisible()
})
} else {
let window = UIWindow(windowScene: windowScene)
self.window = window
let mainstoryboard:UIStoryboard = UIStoryboard(name: "Login", bundle: nil)
let newViewcontroller:UIViewController = mainstoryboard.instantiateViewController(withIdentifier: "LoginViewControllerID") as! LoginViewController
window.rootViewController = newViewcontroller
window.makeKeyAndVisible()
}
}
在转换之间,会出现一个黑屏(在my.gif中显示约0.2秒),具体取决于加载时间。很抱歉质量差,持续时间短,但您会看到:
这个黑屏是从哪里来的?尝试更改这一行:-
赛尔夫,窗户!。rootViewController=UINavigationController(rootViewController:DashboardVC)
赛尔夫,窗户!。makeKeyAndVisible()该问题似乎是由启动情节提要和可见窗口之间的演示中的“间隙”引起的。appleIDProvider是异步的 一个解决方法,而不是修复,是呈现一个临时视图(与您的启动故事板具有相同的颜色或内容),并在授权完成后替换它
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else { return }
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: TempView())
self.window = window
window.makeKeyAndVisible()
let user = User.shared
let appleIDProvider = ASAuthorizationAppleIDProvider()
appleIDProvider.getCredentialState(forUserID: user.id) { (credentialState, error) in
switch credentialState {
case .authorized:
DispatchQueue.main.async {
user.authenticated = true
window.rootViewController = UIHostingController(rootView: HomeView(showAlert: false, showSendview: false, showAccountview: false))
}
default:
DispatchQueue.main.async {
user.authenticated = false
window.rootViewController = UIHostingController(rootView: SignInView().environment(\.window, window))
}
}
}
}
你有没有找到解决办法?我也遇到了同样的问题,根据授权状态设置ViewController并得到黑色闪烁。