长按手势识别器只有在手指抬起时才会触发。

3

我遇到了一个有趣的问题,与长按手势识别器有关。我在一个UITableView上放置了一个这样的手势识别器,只有当我在长按后抬起手指时才会起作用。所以基本上,我会把手指放在一个单元格上,然后当我抬起手指时,它就会触发长按操作。我通过在长按开始和结束时添加printn来发现这一点,两者都在我抬起手指后触发。我认为tableView的默认panGestureRecognizer可能会干扰longPressGestureRecognizer。以下是我的viewDidLoad中的代码:

    var longPress:UILongPressGestureRecognizer = UILongPressGestureRecognizer(target: self, action: "handleLongPress:")
    longPress.minimumPressDuration = 0.06
    longPress.delegate = self
    self.tableView.addGestureRecognizer(longPress)
    longPress.requireGestureRecognizerToFail(self.tableView.panGestureRecognizer)
1个回答

2

在单元格中触摸不会导致表视图的panGestureRecognizer失败,因此删除requireGestureRecognizerToFail方法,然后在手指仍按下时应该可以到达.Began状态。


是的,但是我的长按手势识别器会干扰我的平移手势识别器。我有点进退两难。 - codeforfood
@codeforfood 你尝试过实现gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:并返回true吗? - rdelmar
是的,我做到了,长按功能可以正常工作,但是每当我滚动时,长按事件就会被触发。请记住,我的长按时间实际上非常短,所以这可能与此有关。 - codeforfood
@codeforfood,如果你需要“长按”(0.06不算长)时间这么短,我认为你可能会遇到困难。对我来说,0.2的值可以正常工作。但是用户在尝试滚动之前总是可以暂停一下,所以我不确定你是否能确保长按不会在用户没有意图时触发。 - rdelmar

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