Chapters

Hide chapters

SwiftUI Cookbook

Live Edition · iOS 16.4 · Swift 5.8.1 · Xcode 14.3.1

Design a Seamless Onboarding Experience in SwiftUI
Written by Team Kodeco

First impressions are everything, especially in the world of apps. An engaging onboarding process guides your user through the initial steps, explains the app’s core features and makes them feel at home. In this chapter, you’ll create a whimsical onboarding experience for an imaginary space exploration app, CosmoJourney. Strap in, and let’s launch into the SwiftUI universe!

Step 1: Create the Onboarding Views

You’ll start by creating a series of SwiftUI views for the onboarding screens. Each view will present a fun fact about space travel. Add a new SwiftUI View file to your project and call it OnboardingView.swift. Replace its contents with the following:

struct OnboardingView: View {
  let title: String
  let image: String
  let description: String

  var body: some View {
    VStack {
      Image(systemName: image)
        .font(.largeTitle)
        .padding()
      Text(title)
        .font(.headline)
      Text(description)
        .multilineTextAlignment(.center)
        .padding()
    }
  }
}

struct OnboardingView_Previews: PreviewProvider {
  static var previews: some View {
    OnboardingView(title: "Fun Fact", image: "paperplane.fill", description: "Space travel isn't for the faint-hearted.")
  }
}

In this example view, the VStack organizes the elements vertically. System images, also known as SF Symbols, are used for simplicity, but you can replace them with custom images.

Your preview should look like this:

A simple onboarding screen in SwiftUI.
A simple onboarding screen in SwiftUI.

Step 2: Use a TabView to Navigate Through Pages

You’ll add a TabView to ContentView to allow the user to swipe between the onboarding pages:

struct ContentView: View {
  var body: some View {
    TabView {
      OnboardingView(title: "The Final Frontier", image: "globe", description: "Explore the universe from the comfort of your spaceship!")
      OnboardingView(title: "Meet Alien Friends", image: "person.3.fill", description: "Make intergalactic friendships with beings from other planets!")
      OnboardingView(title: "Astronaut Life", image: "suit.fill", description: "Live the astronaut lifestyle with zero gravity workouts!")
    }
    .tabViewStyle(.page)
    .padding()
  }
}

In the code above you:

  • Use the PageTabViewStyle as .page to allow swiping between pages.
  • Reuse the OnboardingView for each page.

Step 3: Add a Get Started Button

Finally, add a Get Started button that transitions the user to the main app:

struct ContentView: View {
  @State private var showMainApp = false

  var body: some View {
    if showMainApp {
      Text("Welcome to CosmoJourney!")
        .multilineTextAlignment(.center)
        .font(.largeTitle)
    } else {
      VStack {
        TabView {
          OnboardingView(title: "The Final Frontier", image: "globe", description: "Explore the universe from the comfort of your spaceship!")
          OnboardingView(title: "Meet Alien Friends", image: "person.3.fill", description: "Make intergalactic friendships with beings from other planets!")
          OnboardingView(title: "Astronaut Life", image: "airplane", description: "Live the astronaut lifestyle with zero gravity workouts!")
        }
        .tabViewStyle(.page)

        Spacer()

        Button("Get Started") {
          showMainApp.toggle()
        }
        .padding()
        .font(.title3)
        .background(Color.blue)
        .foregroundColor(.white)
        .cornerRadius(10)
        .padding(.bottom)
      }
    }
  }
}

Here’s what your preview should look like:

Onboarding preview in SwiftUI.
Onboarding preview in SwiftUI.

Here’s what the code does:

  • Displays an OnboardingView for each page.
  • Uses an @State property wrapper to observe changes in the showMainApp variable.
  • When the button is tapped, the value of showMainApp toggles to true, ending the onboarding. In a fully functioning app, you would then display your main app view.

Wrapping Up

Voila! You’ve crafted a seamless onboarding experience in SwiftUI, ready to welcome your users to the thrilling world of CosmoJourney. This fun, swipeable introduction sets the tone for the entire app, and with SwiftUI, it’s as simple as defining a few views and toggling a state variable. Feel free to customize the content, appearance, and transitions further to fit your particular app’s theme. Happy coding, and may your apps always enjoy a smooth liftoff!

Have a technical question? Want to report a bug? You can ask questions and report bugs to the book authors in our official book forum here.
© 2024 Kodeco Inc.