提前致谢,我想分享 UILongPressGestureRecognizer
的奇怪行为。
UIView *v = [UIView alloc] initWithFrame:CGRectMake(0,0,20,20)];
UILongPressGestureRecognizer *longpressGesture1 = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[v addGestureRecognizer:longpressGesture1];
这里是处理手势识别器的委托(delegate)。
-(IBAction)tapped:(UILongPressGestureRecognizer *) gesture
{
switch ([gesture state]) {
case UIGestureRecognizerStateBegan:
{
NSLog(@"Long Tap detacted.");
}
break;
case UIGestureRecognizerStateChanged:
{
NSLog(@"UIGestureRecognizerStateChanged");
}
break;
case UIGestureRecognizerStateEnded:
{
NSLog(@"Long Tap ended.");
}
break;
}
}
这段代码在 iOS 4 和 5 中按预期完美运行,但在带有视网膜显示的 ios 6 中,当我们执行长按时,UIGestureRecognizerStateBegan
被调用两次以进行一次长按,结果在应用程序崩溃中。
非常欢迎任何帮助。
最佳答案
UILongPressGestureRecognizer 是一个连续事件识别器。您必须查看状态以确定这是事件的开始、中间还是结束,并采取相应的行动。
它会调用两次,因为您按下并移开手指。
第一个电话指示您检测到长按,即 UIGestureRecognizerStateBegan
第二次调用表明您该点击已结束,即 UIGestureRecognizerStateBegan
点击的三种状态
UIGestureRecognizerStateBegan
UIGestureRecognizerStateChanged
UIGestureRecognizerStateEnded
如果您拖动手指,它会多次调用,这表明它的状态发生了一些变化。
关于iphone - UIGestureRecognizerStateBegan 在 iOS 6 中调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15363311/