【Swift UI】画面遷移時に任意の処理を挟む方法!Navigation
この記事からわかること
- Swift UIのNavigationで画面遷移時に処理を挟む方法
- 画面遷移と同時にアクションを実行させるには?
- インタースティシャル広告の表示方法
- simultaneousGestureの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
画面遷移時に任意の処理を挟む方法
インタースティシャル広告をアプリに導入時に画面遷移のタイミングで広告を表示させたかったのですが、NavigationLinkなどを使用する場合に画面遷移の処理は無効にせず処理を挟みたい場面に遭遇しました。
このような「画面遷移時に任意の処理を挟みたい」場合はsimultaneousGesture
を使用することで解決できます。
NavigationLink {
ChildView(item)
} label: {
Text(item.name)
}.simultaneousGesture(TapGesture().onEnded {
print("任意の処理を実行する")
})
あとはsimultaneousGesture
内にインタースティシャルを表示する処理を入れ込めば広告を表示後に画面遷移する動作を実装することが可能です。
simultaneousGesture
simultaneousGesture
とはGestureイベント発生時に処理を実装できるモディファイアの1つです。中でもsimultaneousGesture
は元となるGestureイベントで発火する処理を無効にすることなく引数に追加した処理も同時に実行することが可能です。
その他のGestureイベントについては以下の記事を参考にしてください。
navigationDestinationを使用する
「画面遷移時に任意の処理を挟む」別の方法としてnavigationDestination
を使用する方法もあります。先ほどのようにListのItemから画面遷移しない場合は以下の方法でも実装することが可能です。Itemから画面遷移する場合は挙動がおかしくなる場合があります。
struct TestNavigationView: View {
@State var isPresented:Bool = false
var body: some View {
NavigationStack {
VStack {
Button {
print("任意の処理")
isPresented = true
} label: {
Text("Navigate Button")
}
}
.navigationTitle("Navigation")
.navigationDestination(isPresented: $isPresented) {
MyNextView()
}
}
}
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。