ユーザーが 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
}
}