LoginSignup
4
3

More than 1 year has passed since last update.

【SwiftUI】画面遷移の方法

Posted at

はじめに

SwiftUIで公式に提供されている画面遷移方法は3つあります。
① NavigationLink
② sheet
③ fullScreenCover

今回は上記の3つ + カスタム遷移を1つ紹介しようと思います。

NavigationLink

Videotogif.gif

ContentView.swift
import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink("NavigationLink") {
                SubView()
            }
        }
    }
}
SubView.swift
import SwiftUI

struct SubView: View {
    @Environment(\.dismiss) var dismiss
    var body: some View {
        ZStack {
            Color.yellow.edgesIgnoringSafeArea(.all)
            Button("閉じる") {
                dismiss()
            }
        }
    }
}

Sheet

Videotogif.gif

ContentView.swift
import SwiftUI

struct ContentView: View {
    @State var ShowSheet: Bool = false
    var body: some View {
        Button("Sheet") {
            ShowSheet.toggle()
        }
        .sheet(isPresented: $ShowSheet) {
            SubView()
        }
    }
}
SubView.swift
import SwiftUI

struct SubView: View {
    @Environment(\.dismiss) var dismiss
    var body: some View {
        ZStack {
            Color.yellow.edgesIgnoringSafeArea(.all)
            Button("閉じる") {
                dismiss()
            }
        }
    }
}

fullScreenCover

Videotogif.gif

ContentView.swift
import SwiftUI

struct ContentView: View {
    @State var ShowFullScreenCover: Bool = false
    var body: some View {
        Button("fullScreenCover") {
            ShowFullScreenCover.toggle()
        }
        .fullScreenCover(isPresented: $ShowFullScreenCover) {
            SubView()
        }
    }
}
SubView.swift
import SwiftUI

struct SubView: View {
    @Environment(\.dismiss) var dismiss
    var body: some View {
        ZStack {
            Color.yellow.edgesIgnoringSafeArea(.all)
            Button("閉じる") {
                dismiss()
            }
        }
    }
}

overlay

Videotogif.gif

ContentView.swift
import SwiftUI

struct ContentView: View {
    @State var ShowViewOverlay: Bool = false
    var body: some View {
        NavigationView {
            Button("Overlay") {
                withAnimation {
                    ShowViewOverlay.toggle()
                }
            }
        }
        .overlay(
            SubView(ShowViewOverlay: $ShowViewOverlay)
        )
    }
}
SubView.swift
import SwiftUI

struct SubView: View {
    @Binding var ShowViewOverlay: Bool
    var body: some View {
        if ShowViewOverlay {
            ZStack {
                Color.yellow.edgesIgnoringSafeArea(.all)
                Button("閉じる") {
                    withAnimation {
                        ShowViewOverlay.toggle()
                    }
                }
            }
        }
    }
}
4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3