同时禁用多个长按手势

时间:2012-05-29 12:47:07

标签: objective-c ios uigesturerecognizer

我有一个UIView,我有多个UIImageView's作为其子视图。 我在每个子视图中添加了UILongPressGestureRecognizer。 我在一个方法中处理这个手势,我在发件人UIImageView上执行一些动画。

如果我一次长按两个ImageView's,动画就会中断。

有什么办法可以同时禁用多个长按手势吗?即只允许一个 UIImageView检测LongPress手势。

2 个答案:

答案 0 :(得分:5)

您实际上有几种方法可以解决您的问题:

为所有图片视图设置exclusiveTouch为YES。它将阻止在同一窗口中将触摸事件传递给其他视图。

或者,当您的一个识别器移动到Begin状态时,您可以设置标志以忽略其他识别器。

或者你可以禁用手势识别器(UIGestureRecognizer具有enabled属性),除了你的委托方法中的当前属性,并在手势完成后再次启用所有这些属性。

答案 1 :(得分:0)

我们还可以解决问题如果我们正在使用TableViewController,我们希望UILongPressGestureRecognizer同时仅在一个单元格上运行。

首先,我们需要在CustomCell中定义静态变量:

static var isLongPressInProgress = false

然后在gestureRecognizerShouldBegin中说明我们是否可以使用手势:

override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer) -> Bool
{        
    if let _ = gestureRecognizer as? UILongPressGestureRecognizer
    {
        if CustomCell.isLongPressInProgress == true
        {
          return false
        }
      return true
     }
  return false
 }

您会将isLongPressInProgress中的变量case .Began:设置为true,将case .Ended:设置为false