본문 바로가기

TIL

[TIL] SwiftUI 시작화면 제작기

시작 화면 흐름

구현부

Launch Screen

처음 앱 시동시  Launch Screen(실제 구현에선 SplashView로 명명)을 띄운 후, 2초뒤 dismiss 처리하고, 대신 홈 화면(실제 구현에선 ContentView)를 띄웁니다.

struct LaunchScreenView: View {
    
    @State private var isLaunching: Bool = true
    
    var body: some View {
        if isLaunching {
            SplashView()
                .onAppear {
                	// 2초후 SplashView가 사라짐
                    DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
                        isLaunching = false
                    }
                }
        } else {
            ContentView()
        }
    }
}

Home 

유저의 이전 로그인 기록 여부에 따라 Onboarding 화면 표시를 결정합니다.

이전 로그인 기록은 @AppStorage Property Wrapper를 통해 UserDefaults에 기록합니다.

struct ContentView: View {
    
    @EnvironmentObject var appIntent: AppIntent
    
    @AppStorage("isOnBoardingPresented") var isOnBoardingPresented: Bool = true

    var body: some View {
        MyBitTabView()
            .fullScreenCover(isPresented: $isOnBoardingPresented) {
                OnboardingView(isOnBoardingPresented: $isOnBoardingPresented)
            }
            .onReceive(Just(appIntent.state.isLogin), perform: { isLogin in
                isOnBoardingPresented = !isLogin
            })
    }
}

Onboarding

Onboarding 화면에서는 원하는 화면을 구성합니다.

참고 사이트 

https://velog.io/@seodam_hst/SwiftUI-%EC%98%A8%EB%B3%B4%EB%94%A9Onboarding-%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0