iOS长按手势调用两次解决方法

Posted ming1025

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS长按手势调用两次解决方法相关的知识,希望对你有一定的参考价值。

由于以前没有很细致的研究过长按手势,所以今天使用的时候发现长按手势会调用两次响应事件。

主要原因是长按手势会分别在UIGestureRecognizerStateBeganUIGestureRecognizerStateEnded状态时调用响应函数

这时就需要在响应事件中增加手势状态的判断,根据具体的应用情况在相应的状态中执行操作。

typedefNS_ENUM(NSInteger, UIGestureRecognizerState) {
    UIGestureRecognizerStatePossible,// the recognizer has not yet recognized its gesture, but may be evaluating touch events. this is the default state
    UIGestureRecognizerStateBegan,// the recognizer has received touches recognized as the gesture. the action method will be called at the next turn of the run loop
    UIGestureRecognizerStateChanged,// the recognizer has received touches recognized as a change to the gesture. the action method will be called at the next turn of the run loop
    UIGestureRecognizerStateEnded,// the recognizer has received touches recognized as the end of the gesture. the action method will be called at the next turn of the run loop and the recognizer will be reset to UIGestureRecognizerStatePossible
    UIGestureRecognizerStateCancelled,// the recognizer has received touches resulting in the cancellation of the gesture. the action method will be called at the next turn of the run loop. the recognizer will be reset to UIGestureRecognizerStatePossible
    UIGestureRecognizerStateFailed,// the recognizer has received a touch sequence that can not be recognized as the gesture. the action method will not be called and the recognizer will be reset to UIGestureRecognizerStatePossible
// Discrete Gestures – gesture recognizers that recognize a discrete event but do not report changes (for example, a tap) do not transition through the Began and Changed states and can not fail or be cancelled
    UIGestureRecognizerStateRecognized =UIGestureRecognizerStateEnded// the recognizer has received touches recognized as the gesture. the action method will be called at the next turn of the run loop and the recognizer will be reset to  UIGestureRecognizerStatePossible
};
if (longPressGesture.state == UIGestureRecognizerStateBegan) {
    // do something
}else if (longPressGesture.state == UIGestureRecognizerStateEnded){
    // do something
}

以上是关于iOS长按手势调用两次解决方法的主要内容,如果未能解决你的问题,请参考以下文章

解决iOS中cell点击无反应,长按才能选中的bug

iOS结合长按和滑动手势

ios 实现在tableViewCell上面添加长按手势 删除该条cell以及列表后台数据等

UILongPressGestureRecognizer 给出奇怪的结果

iOS WKWebView长按自定义菜单功能

ios手势识别之长按