1. ホーム
  2. ios

[解決済み] iOSのPanとSwipeの違いは何ですか?

2022-06-19 01:58:28

質問

簡単なようでいて. トラックパッドを持つ、指を動かす、離す .. しかし、なぜかスワイプがトリガーされない(代わりにパンがトリガーされる)。

UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handleSwipe:)];
swipeGesture.direction= UISwipeGestureRecognizerDirectionUp;
[v addGestureRecognizer:swipeGesture];

パンは、代わりに上記のシーケンスで認識されます。

UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] 
      initWithTarget:v action:@selector(handlePan:)];
[v addGestureRecognizer: panGesture];

パンをコメントした場合、スワイプも同じジェスチャーで認識される・・・これで、2つの疑問。

  • パンとスワイプの違いは何ですか?
  • どのようにiPhoneシミュレータ上でスワイプをシミュレートすることができますか?

どのように解決するのですか?

定義上、スワイプ ジェスチャは、必然的にパン ジェスチャでもあります。パン認識エンジンは並進移動の開始点を探し、時間の経過とともにあらゆる方向への移動を報告し続けますが、スワイプ認識エンジンはユーザーのタッチが必要な方向に直線的に移動したかどうかを即座に判断します。

デフォルトでは、2 つの認識エンジンは同じジェスチャを認識しないため、パンとスワイプの間で競合が発生します。ほとんどの場合、パン認識エンジンは、そのジェスチャがより単純で一般的であるため、競合に勝ちます。スワイプはパンですが、パンはスワイプではないかもしれないので、パンが最初に認識され、他の認識器は除外されます。

デリゲートメソッドを使用してこの競合を解決することができるはずです。 gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: または、パン認識器をスワイプ認識器に依存させることによって、デリゲートなしで requireGestureRecognizerToFail: .

競合が解決されたので、マウスをすばやくドラッグすることによって、1 本指のスワイプをシミュレートできるはずです (ただし、マウスは指よりも正確なので、デバイス上で本物を行うよりも少し細かいことになります)。2 本指でのパン/スワイプは、Option & Shift キーを押しながら行うと行うことができます。