UILongPressGestureRecognizer和UIScreenEdgePanGestureRecognizer

时间:2016-01-25 06:58:15

标签: swift uigesturerecognizer

我正在使用UIScreenEdgePanGestureRecognizer更改视图,在其中一个视图中,我可以使用UILongPressGestureRecognizer(最短持续时间为0)在表格中移动一行。问题是,这个按下手势位于屏幕的边缘,所以我必须配置代表才能使它们正常工作。

新闻动态的代表已经确定:

override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRequireFailureOfGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return otherGestureRecognizer is UIScreenEdgePanGestureRecognizer
}

这在模拟器中工作正常(因为房屋画家更精确)但在设备本身上它不太可靠。我可以毫无问题地更改视图,但移动行仍然有点棘手。

所以我把它改成了:

override func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool {
    return gestureRecognizer is UILongPressGestureRecognizer && otherGestureRecognizer is UIScreenEdgePanGestureRecognizer
}

现在两个都工作正常,但显然这两个手势都在我不想要的同时工作。如果平移手势的x轴的速度大于0,我尝试设置条件使按下手势失败,但到那时按下手势已经开始。

1 个答案:

答案 0 :(得分:0)

您可以做的一件事是为每个手势识别器添加tag并执行以下操作:

func doSomething(sender: UIGestureRecognizer) {
    if sender.tag == 1 {
        // do this
    } else {
        // do that
    }
}
相关问题