0

SwiftUI macOS アプリを構築しています。

ドラッグ ジェスチャを使用した基本的な Rectangle シェイプがあります。

ハンドラーではonEnded、ユーザーがオブジェクトを効果的にタップしたかどうかを判断したいと考えています。これを行うには、翻訳の幅と高さが両方ともゼロであることを確認します。

(タップジェスチャを使用していないのには理由があります)。

Rectangle()
    .size(.init(width:50, height: 50))
    .fill(Color.blue.opacity(0.01))
    .gesture(DragGesture(minimumDistance:0)
                .onChanged { gesture in
                    // Ommited
                }
                .onEnded { gesture in
                    print("startLocation", gesture.startLocation)
                    print("start", gesture.location)
                    print("translation", gesture.translation)
                    
                    if gesture.translation == .zero {
                        print("tap")
                    }

                    print()
                }
    )

予期しない値で翻訳が報告されるという問題が発生しています。

報告される値は、四角形のどこをクリックしたかによって異なります。

個々のクリックのグループのセットを次に示します。はおよびフィールドtranslationから派生します。startLocationlocation

startLocationlocationフィールドの間で変化が見られます。それが非常に小さな変動であればデバウンスできますが、時々 の値を取得するという事実は、3なぜそのような変動が発生するのか疑問に思います (私は動かずにクリックを実行するように気をつけています)。

このバリエーションが忍び寄る理由を誰か知っていますか?

startLocation (263.5149841308594, 144.3092803955078)
start (263.51495361328125, 144.30926513671875)
translation (-3.0517578125e-05, -1.52587890625e-05)

startLocation (276.2882995605469, 144.43479919433594)
start (276.288330078125, 144.434814453125)
translation (3.0517578125e-05, 1.52587890625e-05)

startLocation (274.3827209472656, 162.3402557373047)
start (274.38275146484375, 162.34027099609375)
translation (3.0517578125e-05, 1.52587890625e-05)

startLocation (264.81805419921875, 167.47662353515625)
start (264.81805419921875, 167.47662353515625)
translation (0.0, 0.0)
tap

startLocation (254.5931396484375, 135.4690399169922)
start (254.5931396484375, 135.46905517578125)
translation (0.0, 1.52587890625e-05)

startLocation (259.1647033691406, 140.26919555664062)
start (259.16473388671875, 140.26919555664062)
translation (3.0517578125e-05, 0.0)

編集

以下で指摘されているように、 の値3は実際3e-05 = 0.00003には執筆時点で見逃していました。ただし、Rectangle の一部のポイントで繰り返しクリックするとタップ ジェスチャの移動がゼロになり、他のポイントではゼロ以外の移動が発生する理由に関する情報を引き続き探しています。

4

1 に答える 1