我正在使用SceneDelegate.swift来确定使用此代码显示哪个ViewController:
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()
}
}
在过渡之间,出现黑屏(在我的.gif中显示约0.2秒),具体取决于加载时间。很抱歉,质量不好而且持续时间短,但是您会看到的:
黑屏是哪里来的?
答案 0 :(得分:0)
尝试更改此行:-
self.window!.rootViewController = UINavigationController(rootViewController:DashboardVC)
self.window!.makeKeyAndVisible()
答案 1 :(得分:0)
问题似乎是由启动故事板和可见窗口之间的演示文稿中的“空白”引起的。 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))
}
}
}
}