自动从启动屏幕快速 UI 导航到另一个屏幕,并带有延迟时间

Phu*_*Phu 2 navigation delay ios swiftui

我是 IOS 和 Swift UI 的新手,在启动屏幕后无法导航到登录屏幕。我如何导航到登录屏幕?请帮帮我!我真的很感谢你们的所有回答。

import SwiftUI
import Dispatch

struct SplashScreen: View {
    let login = LoginScreen()
    let color = Color.init("black_1")
//    let color = Color.white
    var body: some View {
        let stack = VStack(alignment: .center){
            Image("logo")
            }.background(color).onAppear(perform: {
            gotoLoginScreen(time: 2.5)
        })

        return stack
    }
}

func gotoLoginScreen(time: Double){
    DispatchQueue.main.asyncAfter(deadline: .now() + Double(time)) {
        print("gotoLoginScreen")
    }
    return
}

struct SplashScreen_Previews: PreviewProvider {
    static var previews: some View {
        SplashScreen()
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

考虑到您可能不想在已经进入后返回到启动屏幕,LoginScreen我建议采用另一种方法,特别是更改rootViewinUIHostingControllerSceneDelegate

如果您想推送到下一个屏幕,您可以使用以下代码重构:

struct SplashScreen: View {
    @State private var isActive = false
    let login = LoginScreen()
    let color = Color.init("black_1")

    var body: some View {
        NavigationView {
            VStack(alignment: .center) {
                Image("logo")
                NavigationLink(destination: login,
                               isActive: $isActive,
                               label: { EmptyView() })
            }
            .background(color)
            .onAppear(perform: {
                self.gotoLoginScreen(time: 2.5)
            })
        }
    }

    func gotoLoginScreen(time: Double) {
        DispatchQueue.main.asyncAfter(deadline: .now() + Double(time)) {
            self.isActive = true
        }
    }
}
Run Code Online (Sandbox Code Playgroud)