1. ホーム
  2. iphone

[解決済み] UILongPressGestureRecognizerが押し下げ時に2回呼び出される

2022-03-14 06:36:05

質問

ユーザーが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回出力されます。なぜでしょうか?どうすれば直せますか?

解決方法を教えてください。

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
     }
  }