如何在SwiftUI中从登录视图过渡到tabView

时间:2019-10-23 01:11:42

标签: swift xcode transition swiftui swift5

我有一个Google登录屏幕,然后应该过渡到TabView。我尝试使用ZStack,但是这导致应用程序在加载每个选项卡之前出现故障。它将显示登录按钮一秒钟,然后将显示正确的选项卡。

是否有一种完全类似于ViewControllers的搜索方式?还是在我调用新视图(MainView)之前有一种方法可以完全删除登录按钮?

MainView只是一个带有tabView和tabItems的SwiftUI视图。

我有一个SwiftUI SignInView:

import SwiftUI
import GoogleSignIn

struct SignInView: View {

    @State var loggedIn = false

    let logo = Image('googleLogo')


    var body: some View {
        ZStack {
            Button(action: {
                self.signIn {
                    self.loggedIn = true
                }

            }, label: {
                VStack {
                    logo
                        .padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
                        .background(Color.white)
                        .cornerRadius(8.0)
                        .shadow(radius: 4.0)
                     Text("Sign-In")
                        .foregroundColor(.primary)
                        .multilineTextAlignment(.center)
                        .padding(5)
                }
            }).zIndex(-1)
            if loggedIn {
                MainView()
            }
        }
    }
    func signIn(completion: @escaping () -> Void) {
           GIDSignIn.sharedInstance()?.presentingViewController = UIApplication.shared.windows.last?.rootViewController
           GIDSignIn.sharedInstance()?.signIn()
           DispatchQueue(label: "SignIn Check", qos: DispatchQoS.background).async(execute: { () -> Void in
               while true {
                   if GIDSignIn.sharedInstance()?.currentUser != nil {
                       completion()
                       break
                   }
               }

           })

       }
    }

    struct SignInView_Previews: PreviewProvider {
        static var previews: some View {
          SignInView()
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以保持ZStack的状态不变,并使登录按钮也成为有条件的一部分,以解决您所看到的故障,但是更干净的解决方案是使用{{ 1}},而不是其中带有登录条件的Group

ZStack