在多个 UIImageView 上点击手势

one tap gesture on multiple UIImageView

我有 2 个 UIImageView 和一个 tapGestureRecognizer。

 override func viewDidLoad() {
        // Do any additional setup after loading the view.

        super.viewDidLoad()

        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(cameraTapped(tapGestureRecognizer:)))

        cameraUIImageView.isUserInteractionEnabled = true
        cameraUIImageView.addGestureRecognizer(tapGestureRecognizer)

        plus1UIImageView.isUserInteractionEnabled = true
        plus1UIImageView.addGestureRecognizer(tapGestureRecognizer)
//        


    }

我只能点击第二个UIImageView,也就是plus1UIImageView。

为什么?

您只能将手势识别器添加到一个视图,因此当您将其添加到第二个视图时,它会从第一个视图中删除。更深入的回答在这里:

Can you attach a UIGestureRecognizer to multiple views?

A UIGestureRecognizer 只能用于单个视图。您正在为两个视图使用相同的对象。试试这个。

override func viewDidLoad() {
    // Do any additional setup after loading the view.

    super.viewDidLoad()

    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(cameraTapped(tapGestureRecognizer:)))

    cameraUIImageView.isUserInteractionEnabled = true
    cameraUIImageView.addGestureRecognizer(tapGestureRecognizer)


    let tapGestureRecognizer2 = UITapGestureRecognizer(target: self, action: #selector(cameraTapped(tapGestureRecognizer:)))

    plus1UIImageView.isUserInteractionEnabled = true
    plus1UIImageView.addGestureRecognizer(tapGestureRecognizer2)        
}

正如所有回答所述,您只能将手势识别器添加到一个视图。尽管如果您的两个图像视图都在同一个超级视图中,您可以将点击手势添加到他们的超级视图并访问其子视图。您可以使用 hitTest: 方法检查点击的子视图并参考点击的图像视图。查看我之前的答案 。如果您有任何疑问,请在评论中告诉我。