我有一个UIView
,我有多个UIImageView's
作为它的子视图。我已经添加UILongPressGestureRecognizer
到每个子视图中。我处理这个手势的方法是在发送者上执行一些动画UIImageView
。
如果我一次长按两个ImageView's
,动画就会中断。
有什么办法可以同时禁用多个长按手势?即只允许一个
UIImageView
检测LongPress 手势。
我有一个UIView
,我有多个UIImageView's
作为它的子视图。我已经添加UILongPressGestureRecognizer
到每个子视图中。我处理这个手势的方法是在发送者上执行一些动画UIImageView
。
如果我一次长按两个ImageView's
,动画就会中断。
有什么办法可以同时禁用多个长按手势?即只允许一个
UIImageView
检测LongPress 手势。
您实际上有几种方法可以解决您的问题:
exclusiveTouch
为所有图像视图设置为 YES。它将阻止将触摸事件传递到同一窗口中的其他视图。
或者,您可以设置标志以在您的识别器之一移动到开始状态时忽略其他识别器。
或者,您可以在委托方法中禁用手势识别器(UIGestureRecognizer 具有enabled
属性),除了当前的手势识别器,并在手势完成时再次启用所有手势识别器。
如果我们正在使用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
}
您将 varisLongPressInProgress
中的设置case .Began:
为 true 和设置case .Ended:
为 false