如果为两个单独的 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)
}
}
}
我将 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)
}
}
}