У меня есть экран входа в Google, а затем он должен перейти к TabView. Я попытался использовать ZStack, но он вызывает сбой приложения перед загрузкой каждой вкладки. На секунду появится кнопка входа, после чего появится правильная вкладка.
Есть ли способ полностью перейти на аналогичный ViewControllers? Или есть способ полностью удалить кнопку входа перед вызовом нового представления (MainView)?
MainView - это просто представление SwiftUI с tabView и tabItems.
У меня есть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()
}
}