Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在SceneDelegate中启动和第一个ViewController之间黑屏闪烁_Swift_Uiviewcontroller - Fatal编程技术网

Swift 在SceneDelegate中启动和第一个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

我正在使用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()
    }
}
在转换之间,会出现一个黑屏(在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并得到黑色闪烁。