如果为两个单独的 UIImageViews 点击相同的位置,UITapGestureRecognizer 不工作

UITapGestureRecognizer not working if tapping same location for two separate UIImageViews

我将 UITapGestureRecognizer 附加到两个不同的图像视图,它们将占据相同的 space 但在不同的时间。目前我正在使用翻转过渡,当点击图像时,它会翻转到另一侧的图像,就像翻转卡片一样。我可以让第一张图片翻转得很好,但是一旦翻转,第二张图片在被点击时根本没有响应。我使用 print("tapped") 来查看第二张图片是否获得了点击手势,但事实并非如此。这是我用来添加点击手势的功能:

  func addTapGestures() {

    jokerImageView.isUserInteractionEnabled = true
    vendettaImageView.isUserInteractionEnabled = true

    let tap = UITapGestureRecognizer(target: self, action: #selector(flipView(_:)))
    jokerImageView.addGestureRecognizer(tap)
    vendettaImageView.addGestureRecognizer(tap)

  }

UITapGestureRecognizer 是一个独特的对象。一次只能添加到一个元素。

因此在您的代码中,您将其添加到 jokerImageView,然后立即 删除 并将其添加到 vendettaImageView

您需要创建 UITapGestureRecognizer 的 2 个实例,或者您需要在 vendetta "used" 之后将其添加到 joker,反之亦然.

编辑: 除了创建第二个手势识别器,您可以试试这个:

func flipView(_ sender: Any) -> Void {

    // view flip code goes here

    // then
    if let g = sender as? UIGestureRecognizer {
        if g.view == vendettaImageView {
            jokerImageView.addGestureRecognizer(g)
        } else {
            vendettaImageView.addGestureRecognizer(g)
        }
    }
}