我正在检测用户是否已按下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”被打印两次 . 为什么是这样?我该怎么办?
7 回答
您需要检查正确的状态,因为每个州都有不同的行为 . 很可能你需要使用
UILongPressGestureRecognizer
的UIGestureRecognizerStateBegan
状态 ....
UILongPressGestureRecognizer是一个连续的事件识别器 . 你必须查看状态,看看这是事件的开始,中间还是结束,并采取相应的行动 . 即你可以在开始后丢弃所有事件,或者只根据需要查看运动 . 来自Class Reference:
现在你可以追踪像这样的状态
要检查UILongPressGestureRecognizer的状态,只需在选择器方法上添加if语句:
试试这个:
Objective-C
Swift 2.2:
以下是在Swift中处理它的方法:
Swift 3.0:
您的手势处理程序接收每个手势状态的调用 . 所以你需要检查每个状态并将你的代码置于必需的状态 .
人们必须更喜欢在if-else上使用switch-case: