子类化 UIGestureRecognizer 和 UILongPressGestureRecognizer

Subclassing UIGestureRecognizer and UILongPressGestureRecognizer

我的情况是 UIView 我已经添加了一个子类 UIGestureRecognizer。我正在使用以下代码;

class ButtonGestureRecognizer: UIGestureRecognizer {

  override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent) {
    //
    state = .began
  }

  override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent) {
    //
    state = .ended
  }
}

这让我可以捕获触摸 "down" 和触摸 "up" 事件,当 UIView 被按下并恢复到正常大小时,我用它来放大 UIView什么时候发布。

我还需要在同一个视图中添加一个 UILongPressGestureRecognizer,其中它在按住时也会放大,而在释放时 return 会恢复到正常大小,但是执行不同的操作动作。

但是,子类化的手势识别器似乎阻止了 UILongPressGestureRecognizer 的工作。到目前为止我找到的唯一解决方案是放弃我的子类手势识别器并使用 UITapGestureRecognizer(需要将最少的点击设置为 1)和 UILongPressGestureRecognizer,但后来我放弃了能力正确检测 tap/press 开始和结束状态。

有什么办法解决这个问题吗?谢谢!

有一个名为 UIGestureRecognizerDelegate 的协议,它有这个方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

如果您遵守该协议并将您的对象设置为识别器的委托,则可以return true 使用该方法,您的手势识别器将协同工作。