2

を使用しGestureRecognizerて、ドラッグとピンチのジェスチャを検出しています。

ManipulationStartedManipulationUpdatedおよびManipulationCompletedイベントは、ピンチ アンド ドラッグに必要な移動とスケールの値を提供します。

ただし、ドラッグ (1 タッチ ポイント) とピンチ (2 タッチ ポイント) ジェスチャを区別する方法がわかりません。のタッチポイント数に関する情報はありませんGestureRecognizer

でドラッグとピンチを区別するにはどうすればよいGestureRecognizerですか?

4

2 に答える 2

2

まあ、私はそれが非常にハックだと感じています (ほとんどのソリューションは使用可能な WinRT アプリ用のようです) が、List<uint>現在画面上でダウンしているポインターの数を追跡するために を作成できます。ポインタが押されたときにポインタを「キャプチャ」するにPointerPressedは、操作しているコントロール ( を使用しているとしましょう) でイベントを処理する必要があります。Canvasそこに を入力しList<uint>ます。ManipulationCompletedイベントの終了時にリストをクリアするのを忘れないでPointerReleasedください。イベントでリストがクリアされていることを確認することをお勧めします。おそらく、それを試してみて、それがどのように機能するかを確認してください。PointerCanceledPointerCaptureLostManipulationStarted

イベントではManipulationCompleted、リストに正確に 2 つの要素 (PointerIds) が含まれているかどうかを確認できます。もしそうなら、あなたはそれがピンチ/ズームであることを知っています.

これは次のようになります。

private void Canvas_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    var ps = e.GetIntermediatePoints(null);
    if (ps != null && ps.Count > 0)
    {
        this.gestureRecognizer.ProcessDownEvent(ps[0]);
        this.pointerList.Add(e.Pointer.PointerId);
        e.Handled = true;
    }
}

private void gestureRecognizer_ManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)
{         
    if (this.pointerList.Count == 2)
    {
       // This could be your pinch or zoom.
    }
    else
    {
       // This could be your drag.
    }

    // Don't forget to clear the list.
    this.pointerList.Clear();
}

// Make sure you clear your list in whatever events make sense.
private void Canvas_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    this.pointerList.Clear();
}

private void Canvas_PointerCanceled(object sender, PointerRoutedEventArgs e)
{
    this.pointerList.Clear();
}
于 2013-10-22T15:41:43.227 に答える
2

私は数時間同じ質問に苦労してきました.WinRTプラットフォームはそれを提供していないようです. 代わりに提供されるのは、ManipulationUpdated コールバックへの引数を持つ Delta.Translation に加えて、Delta.Rotation と Delta.Scale の値です。

Delta.Rotation が 0 (または float 値であるためゼロに非常に近い) で、Delta.Scale が 1 (または 1 に非常に近い) の場合、ピンチ操作ではなく、ドラッグ操作であると結論付けることができます。それ以外の場合はピンチ操作です。入手できる最高のものではありませんが、当面はそれが唯一の入手可能性であるようです.

于 2012-11-20T14:30:21.903 に答える