快速拦截(或强制停止)长按手势识别器

时间:2016-02-20 03:18:25

标签: ios swift cocoa-touch uigesturerecognizer wkwebview

我使用长按手势识别器来设置我自己的wkwebview链接动作表,但是在我释放手指之前动作表不会出现(我试过recognizer.began但它不起作用...)

那么,我如何拦截长按识别器?我可以添加一个计时器来阻止它吗?怎么样?

P.S。这是我的代码:

//long press to show the action sheet
        longPressRecognizer.delegate = self
        longPressRecognizer.addTarget(self, action: "onLongPress:")
        self.webView.scrollView.addGestureRecognizer(longPressRecognizer)

func onLongPress(gestureRecognizer:UIGestureRecognizer){
        longPressSwitch = true
    }

1 个答案:

答案 0 :(得分:0)

使用NSTimer而不是长按识别器。这是一个快速实现示例(Swift 2):

var sameTouch = false
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    _ = NSTimer.scheduledTimerWithTimeInterval(1.5, target: self, selector: "longPressed", userInfo: nil, repeats: false)
    sameTouch = true
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
    sameTouch = false
}

func longPressed() {
    if(sameTouch) {
        longPressSwitch = true
        sameTouch = false
    }
}

非常简单的东西;当'触摸开始'时,我们启动计时器,该计时器将运行1.5秒。我们说_ = ...因为我们永远不会再次引用该计时器,所以不需要命名它。我们还将变量sameTouch设置为true。

如果touchesEnded,我们将sameTouch设置为false。这是因为这会向longPressed()表明触摸是提前释放的。

longPressed()中,我们将longPressSwitch设置为true - 这是来自您的代码。线sameTouch = false不是100%必需的,但它说明了我眼中系统的关闭。

希望,这有帮助!如果您有任何疑问,请告诉我!