UILongPressGestureRecognizer不起作用,但将其替换为UITapGestureRecognizer可以正常工作。为什么?

5
我有一个带有UILongPressGestureRecognizerUIImageView,无论我如何配置手势识别器,它似乎从不检测长按手势。但是,如果我将其替换为UITapGestureRecognizer,那么就会正常工作。可能发生了什么问题?
这是我如何配置UILongPressGestureRecognizer
UIImageView* cellView = (UIImageView*)[view viewWithTag:5];
UILongPressGestureRecognizer* longPressGestureRec =
    [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(cellLongPress:)];
longPressGestureRec.numberOfTapsRequired = 1;
longPressGestureRec.numberOfTouchesRequired = 1;
longPressGestureRec.minimumPressDuration = 0.4;
[cellView addGestureRecognizer:longPressGestureRec];
[longPressGestureRec release];

这是cellLongPress的效果:
-(void)cellLongPress:(UILongPressGestureRecognizer*)recognizer
{
    // This never gets called.
    NSLog(@"someone long pressed me");
}

相当直白明了,对吧?不过到目前为止还没有成功使它工作,有什么想法吗?

每个UITableView的UIImageView都做'alloc'会有问题吗?我看到cellView使用viewWithTag来引用预先分配的实例。那么,每个UITableView的UILongPressGestureRecognizer也需要被预先分配吗? - Doug Null
不,那不是问题所在。问题已经在将近3年前得到了回答...请查看下面的被接受的答案。 - Rob
1个回答

25

numberOfTapsRequired 被设置为 1,这意味着用户在开始长按(手指按下、抬起、再按下0.4秒、手势被识别)之前必须先轻触一次。

numberOfTapsRequired 更改为默认值 0

关于该属性的文档只是简单地说:

视图上所需手势识别的轻拍次数。

但在 UILongPressGestureRecognizer.h 的注释中,它说:

在长按手势被识别之前需要完整轻拍的次数。


1
实际上它默认为1,所以你的答案仍然正确,并且比你想象的更加重要。请参见https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITapGestureRecognizer_Class/#//apple_ref/occ/instp/UITapGestureRecognizer/numberOfTouchesRequired - Joe C
1
Joe说得没错,对于轻拍而言,默认值是1(尽管他指的是下面的链接)。然而,Anna的回答仍然很有见地。tap = 1和tap = 0之间存在微妙的差别。tap更像是一种有力的手势。使用tap = 0和touches = 1,您可以将手指放在屏幕上触发长按(某些人可能会来到此页面)。Taps = 1需要更有意识的触摸。更新链接: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITapGestureRecognizer_Class/#//apple_ref/occ/instp/UITapGestureRecognizer/numberOfTapsRequired - Shaun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接