調べた限り、SwiftUI はまだカスタマイズしたトランジション(画面遷移時のアニメーション方法)を適用できないようです。
よく見られる妥協案としては、フラグとなる Bool
値で配置するビューそのものを切り替えてしまうものですね。
swift
1import SwiftUI
2
3struct ContentView: View {
4 @State var modalViewIsPresenting: Bool = false
5 var body: some View {
6 // 生成・配置するビューそのものを置き換えてしまう
7 if self.modalViewIsPresenting {
8 ModalView(isPresented: self.$modalViewIsPresenting)
9 } else {
10 InitialView(modalViewIsPresenting: self.$modalViewIsPresenting)
11 }
12 }
13}
14
15// 通常時に表示したいビュー
16struct InitialView: View {
17 @Binding var modalViewIsPresenting: Bool
18 var body: some View {
19 ZStack {
20 Color.green // 確認用の背景色
21
22 Button("Present ModalView") {
23 self.modalViewIsPresenting.toggle()
24 }
25 }
26 }
27}
28
29// モーダルで表示したいビュー
30struct ModalView: View {
31 @Binding var isPresented: Bool
32 var body: some View {
33 ZStack {
34 Color.red // 確認用の背景色
35
36 Button("Hide") {
37 self.isPresented.toggle()
38 }
39 }
40 }
41}
備考:
表示切り替えのたびに生成・破棄されていると思うので InitialView
や ModalView
の内容をその中だけで変更しても表示を切り替えればおそらく生成時の初期状態に戻る点には注意してくださいね。
変更を残しておきたい値は母艦になる ContentView
にプロパティを作り各ビューにバインドするなどしてうまくやってください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。