SwiftUIでは、onLongPressGestureモディファイアを使うことで、ロングタップ(長押し)時の処理をビューに適用することができる。
それでは早速サンプルコードを見ていこう。
struct ContentView: View {
@State var showImage = false
var body: some View {
HStack {
Text("Long tap")
.onLongPressGesture(pressing: { press in
print("pressing: \(press)")
}) {
print("perform")
self.showImage.toggle()
}
if showImage {
Image(systemName: "star")
}
}
}
}
Textビューを長押しすることでImageビューの表示・非表示を切り替える簡単なサンプルだ。
今回の例では、onLongPressGestureモディファイアのpressing引数のみを設定しているが、他に以下の引数を指定することができる。
minimumDuration | ロングタップ判定の最小時間 初期値は0.5秒 |
maximumDistance | ロングタップ判定の最大距離 長押し中にずれても許容する距離を指定 初期値は10ポイント |
pressing | ボタンが押された時と、離れた時、 それぞれのタイミングで実行する処理 |
サンプルコードではprint文の記述がいくつかあるが、xcodeの通常のプレビュー機能ではprint文の出力を確認することができない。
そこで、プレビューボタン上で右クリックして表示されるコンテキストメニューから「Debug Preview」を選択し実行する必要がある。
こうすることでデバッグモードが有効になり、print文の結果を確認することができる。
pressing引数で指定したとおり、まず長押しが始まったタイミングでtrue、指を離したタイミングでfalseが出力されており、そして最後にonLongPressGestureの処理が走っていることが分かる。