我有一个UIView
,我有多个UIImageView's
作为其子视图。
我在每个子视图中添加了UILongPressGestureRecognizer
。
我在一个方法中处理这个手势,我在发件人UIImageView
上执行一些动画。
如果我一次长按两个ImageView's
,动画就会中断。
有什么办法可以同时禁用多个长按手势吗?即只允许一个
UIImageView
检测LongPress手势。
答案 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