SwiftUI: ボタンのタップと長押しの両方をどのように処理しますか? 質問する

SwiftUI: ボタンのタップと長押しの両方をどのように処理しますか? 質問する

SwiftUI にボタンがあり、「ボタンをタップ」(通常のクリック/タップ)と「長押し」に異なるアクションを設定できるようにしたいと考えています。

SwiftUI でそれは可能ですか?

以下は、現在使用しているボタンの簡単なコードです (「通常の」タップ/タッチのケースのみを処理します)。

Button(action: {self.BLEinfo.startScan() }) {
                        Text("Scan")
                    } .disabled(self.BLEinfo.isScanning)

すでに「longPress ジェスチャ」を追加しようとしましたが、それでも「通常/短い」クリックのみが「実行」されます。私が試したコードは次のとおりです。

Button(action: {self.BLEinfo.startScan() }) {
                        Text("Scan")
                            .fontWeight(.regular)
                            .font(.body)
                        .gesture(
                            LongPressGesture(minimumDuration: 2)
                                .onEnded { _ in
                                    print("Pressed!")
                            }
                        )
                    }

ありがとう!

ジェラルド

ベストアンサー1

いろいろ試してみましたが、最終的には次のようになりました:

    Button(action: {
    }) {
        VStack {
            Image(self.imageName)
                .resizable()
                .onTapGesture {
                    self.action(false)
                }
                .onLongPressGesture(minimumDuration: 0.1) {
                    self.action(true)
                }
        }
    }

依然として効果のあるボタンですが、短押しと長押しが異なります。

おすすめ記事