如何在 UIView 中为 UIImageView 添加 tapGesture

Posted

技术标签:

【中文标题】如何在 UIView 中为 UIImageView 添加 tapGesture【英文标题】:How to add tapGesture for UIImageView in UIView 【发布时间】:2017-09-26 08:26:59 【问题描述】:

我一直在为 UIView 中的 UIImageView 添加点击手势识别器。我确实为 UIImageView 和 UIView 设置了 isUserInteractionEnabled = true。但它仍然无法正常工作。

@IBOutlet weak var adView: UIView!<br>
@IBOutlet weak var defaultBannerView: UIImageView!
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(FavouritesVC.tappedImageBanner(_:)))

defaultBannerView.addGestureRecognizer(tapGesture) defaultBannerView.isUserInteractionEnabled = true adView.isUserInteractionEnabled = true

 func tappedImageBanner(_ sender: UIGestureRecognizer)
    print("Tapped")
    let tappedImageView = sender.view!
    let imageView = tappedImageView as! UIImageView
    print(imageView) 

编辑:

我添加了 adView.addGestureRecognizer(tapGesture) 但错误是'无法将'UIView'类型的值转换为'UIImageView''

实际上我在做 admob,当我无法从 google admob 请求横幅时,我想放置我的默认横幅。所以我希望用户能够点击我的默认横幅并直接访问网站。那么,当我可以从谷歌获得广告时,我应该在 adView 中添加 tapGesture 并隐藏 imageView 吗?

如果我想在 UIImageView 中添加手势怎么办?我该怎么做?

【问题讨论】:

***.com/a/27880669/8432814 参考这个答案 How to assign an action for UIImageView object in Swift的可能重复 在 UIImageView 上添加一个 UIButton 并对其进行操作。 你必须为 uiview 和 uiimageview 创建两个点击手势,然后使用 yourview.addGestureRecognizer(tapGesture) yourImageview.addGestureRecognizer(tapGesture) 感谢您的快速响应,我确实参考了链接,但在我的情况下它不起作用。我添加了一个名为 adView 的自定义 UIView,并在 customView 内部添加了 UIImageView。我尝试为 adView 和 defaultBannerView 设置 isUserInteractionEnabled。这是工作。但我想要的只是 defaultBannerView 中的 tapGesture。如果我没有为 adView 添加GestureRecognizer,它将不允许我触摸 defaultBannerView.... 那么我应该只在视图中添加点击手势吗? 【参考方案1】:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)

    let tappedImage = tapGestureRecognizer.view as! UIImageView

    // Your action 

【讨论】:

我试过了,它在我的情况下不起作用......因为我将 imageView 放在自定义 UIview 中。现在,当我为 UIView 添加 isUserInteractionEnabled 和 addGestureRecognizer 时,它可以工作了。但我想要的只是 UIimageview 中的手势...... 非常感谢,您拯救了我的一天,userInteractionEnabled 为我创造了奇迹,谢谢【参考方案2】:

我一直在为 UIView 中的 UIImageView 添加点击手势识别器。 (...) 但它仍然无法正常工作。

这是什么意思:不工作?我可以假设没有检测到水龙头。

我添加了 adView.addGestureRecognizer(tapGesture) 但错误是'无法将'UIView'类型的值转换为'UIImageView''

什么时候发生错误?我假设它是在点击 adView 时出现的,因为您的 sender.view! 不是 UIImageView(如果手势识别器链接到 UIView)。

当我无法从 google admob 请求横幅时,我想放置我的默认横幅。 (...) 那么当我可以从谷歌获得广告时,我应该在 adView 中添加 tapGesture 并隐藏 imageView 吗?如果我想在 UIImageView 中添加手势怎么办?

您是否考虑过在 UIView 上方添加 UIImageView 并将其 alpha 更改为 0 或在 Banner 加载时隐藏 - 它可以防止 imageView 被点击?

实际上我在做 admob (...) 我添加了一个名为 adView 的自定义 UIView (...) 它不允许我触摸 defaultBannerView

正如您所说,您正在将 imageView 添加到自定义视图中,但您不知道它是如何工作的。想想你是否真的需要干预它的逻辑。

【讨论】:

感谢您的回复,是的。 1-你是对的,在 imageView 中没有检测到水龙头。 2-是的,我想是的,所以它导致了一个错误。 3-您的意思是将 imageView 放在自定义视图中?是的,目前我正在这样做,但是只有当我将手势功能放置到自定义视图时,手势才会起作用。然后当横幅加载时,我将 imageView 设置为隐藏并删除手势。是对的吗? 4-正如您在最后一句中提到的,是的,我是ios开发人员的新手,请问自定义视图中的imageView不能这样工作的原因是什么?

以上是关于如何在 UIView 中为 UIImageView 添加 tapGesture的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 UILabel 和 UIImageView 以使它们在情节提要文档大纲中为灰色?

在 iOS 中为 UIImageView 以外的东西设置内容模式

如何在 Swift 中为 NSLayoutConstraint 设置动画?

如何在 UIView 中有一个 UIImageView 并应用 NSLayoutConstraint?

如何在ios目标c的UIImageView中添加UIView

如何在 UITableView 的单元格中为 UIImageView 获取 touchesMoved?