如何为UIView中的UIImageView添加tapGesture

4

我在为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) 默认的横幅视图添加手势识别器(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),但是出现了错误'Could not cast value of type 'UIView' to 'UIImageView''

实际上,我正在使用AdMob,当我无法从Google AdMob请求横幅时,我希望放置我的默认横幅。因此,我希望用户能够点击我的默认横幅并直接转到网站。那么,我应该在adView中添加tapGesture,并在无法从google获取广告时隐藏imageView吗?

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


请参考此回答:https://dev59.com/a14c5IYBdhLWcg3weaT8#27880669 - Hakikat Singh
1
可能是如何在Swift中为UIImageView对象分配操作的重复问题。 - RajeshKumar R
在 UIImageView 上添加一个 UIButton 并处理它的操作。 - cpt. Sparrow
你需要为UIView和UIImageView创建两个轻拍手势,然后使用以下代码: yourview.addGestureRecognizer(tapGesture) yourImageview.addGestureRecognizer(tapGesture) - Anil Kumar
感谢您的快速回复,我确实参考了链接,但在我的情况下它不起作用。我添加了一个自定义UIView叫做adView,并在其中添加了UIImageView。我尝试为adView和defaultBannerView都设置isUserInteractionEnabled,它可以工作。但是我想要的只是在defaultBannerView中使用tapGesture。如果我没有为adView添加手势识别器,它就不允许我触摸defaultBannerView...所以我应该在视图中添加tap手势吗? - Andrew
请查看此链接 https://dev59.com/L14b5IYBdhLWcg3w7Fgv - Suja
2个回答

11
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中进行手势操作... - Andrew
非常感谢,你救了我的一天,userInteractionEnabled 对我起了魔法,谢谢。 - Sakthimuthiah

0
我在为UIView中的UIImageView添加轻拍手势识别器时遇到了困难。(...)但它仍然无法工作。
那是什么意思:不起作用?我可以假设无法检测到轻拍。
我添加了adView.addGestureRecognizer(tapGesture),但错误是“无法将类型'UIView'的值转换为'UIImageView'”。
当错误发生时呢?我假设它发生在点击adView时,因此您的sender.view!不是UIImageView(如果手势识别器链接到UIView)。
我想在无法从Google Admob请求横幅广告时放置我的默认横幅广告。(...)那么我应该只需在adView中添加tapGesture并在可以从Google获取广告时隐藏imageView吗?如果我想在UIImageView中添加手势怎么办?
您是否考虑过在UIView上方添加UIImageView,并在加载横幅广告时将其alpha更改为0或隐藏-这可以防止imageView被点击?
实际上,我正在使用Admob (...)我添加了一个名为adView的自定义UIView(...)它不允许我触摸defaultBannerView。

正如您所说,您正在将imageView添加到自定义视图中,但您不知道它的实际工作原理。请考虑是否真的需要干预其逻辑。


谢谢答复,是的。1-你是对的,在imageView中无法检测到点按事件。2-是的,我想是这样,所以才会导致错误。3-你的意思是把imageView放在自定义视图中吗?是的,目前我正在这样做,但是当我将手势函数放到自定义视图中时,手势只能在自定义视图中起作用。然后当横幅广告加载时,我将imageView设置为隐藏并移除手势。这样对吗?4-正如你所提到的最后一句话,是的,我是iOS开发新手,想知道为什么自定义视图中的imageView不能像那样工作的原因是什么? - Andrew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接