UILongPressGestureRecognizer は押すと2回呼び出されます 質問する

UILongPressGestureRecognizer は押すと2回呼び出されます 質問する

ユーザーが 2 秒間押したかどうかを検出しています。

UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]
                                             initWithTarget:self 
                                             action:@selector(handleLongPress:)];
        longPress.minimumPressDuration = 2.0;
        [self addGestureRecognizer:longPress];
        [longPress release];

長押しの処理方法は次のとおりです。

-(void)handleLongPress:(UILongPressGestureRecognizer*)recognizer{
    NSLog(@"double oo");
}

2 秒以上押し続けると、「double oo」というテキストが 2 回印刷されます。これはなぜでしょうか。どうすれば修正できますか。

ベストアンサー1

UILongPressGestureRecognizer は連続イベント認識器です。イベントの開始、中間、終了のいずれであるかを判断するために状態を確認し、それに応じて動作する必要があります。つまり、開始後のすべてのイベントを破棄するか、必要な動きだけを確認することができます。クラスリファレンス:

長押しジェスチャは継続的です。ジェスチャは、許容される指の数 (numberOfTouchesRequired) が指定された期間 (minimumPressDuration) 押され、タッチが許容される移動範囲 (allowableMovement) を超えて移動しない場合に開始されます (UIGestureRecognizerStateBegan)。ジェスチャ認識機能は、指が動くたびに Change 状態に遷移し、いずれかの指が離されると終了します (UIGestureRecognizerStateEnded)。

このように状態を追跡できるようになりました

-  (void)handleLongPress:(UILongPressGestureRecognizer*)sender { 
    if (sender.state == UIGestureRecognizerStateEnded) {
      NSLog(@"UIGestureRecognizerStateEnded");
    //Do Whatever You want on End of Gesture
     }
    else if (sender.state == UIGestureRecognizerStateBegan){
       NSLog(@"UIGestureRecognizerStateBegan.");
   //Do Whatever You want on Began of Gesture
     }
  }

おすすめ記事