はじめに
Button
のタップと長押しの両方を共存させて処理を変えたいと思って試しに実装してみました。
開発時用の設定画面に遷移させたい、みたいなシーンで使えるかも?
コード全文
サンプルコード
import SwiftUI
struct ContentView: View {
@State var isLongPress = false
@State var isTap = false
var body: some View {
NavigationStack {
Button {
} label: {
Text("押せ!!")
}
.navigationDestination(isPresented: $isLongPress) {
SecondView()
.navigationTitle("SecondView")
}
.navigationDestination(isPresented: $isTap) {
ThirdView()
.navigationTitle("ThirdView")
}
.simultaneousGesture(
LongPressGesture(minimumDuration: 0.4)
.onEnded { _ in
print("long press gesture")
isLongPress.toggle()
}
)
.simultaneousGesture(
TapGesture()
.onEnded { _ in
print("tap gesture")
isTap.toggle()
}
)
.navigationBarTitleDisplayMode(.inline)
.navigationTitle("Home")
}
}
}
struct SecondView: View {
var body: some View {
Text("SecondView")
}
}
struct ThirdView: View {
var body: some View {
Text("ThirdView")
}
}
スクリーンショット
おわりに
Button
でタップと長押しのジェスチャーを共存させる方法って他にもっといい方法あるかもしれないです。