添加手势识别器到uiimage

问题描述 投票:0回答:3

我有图像滑块..我按照本教程来做:Create a Horizontal Paging UIScrollView with UIPageControl Swift 4 XCode 9,它的工作完美..

现在我想在这些图像上添加手势识别器..我试着这样做:

func createSlides() -> [banner] {

    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapped))
    tapGesture.numberOfTapsRequired = 1
    tapGesture.numberOfTouchesRequired = 1

    let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide1.img.image = UIImage(named: "bannerex")
    slide1.img.addGestureRecognizer(tapGesture)

    let slide2:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide2.img.image = UIImage(named: "bannerex")
    slide2.img.addGestureRecognizer(tapGesture)

    let slide3:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
    slide3.img.image = UIImage(named: "bannerex")
    slide3.img.addGestureRecognizer(tapGesture)

    return [slide1, slide2, slide3]
}

@objc func tapped(_ sender: UITapGestureRecognizer){
    print("tapped")
    print(pageControl.currentPage)
}

但它不起作用,什么都不会发生。

如何解决这个问题?

import UIKit

class banner: UIView {


@IBOutlet weak var img: UIImageView!

 }
ios swift uiimage uigesturerecognizer
3个回答
3
投票

这里有两个问题:

  1. isUserInteractionEnabled默认是false
  2. 你必须为每个图像视图分配一个单独的手势识别器

我没有为每个图像视图单独设置isUserInteractionEnabledtrue,我建议将该代码放在Banner类本身。由于您似乎是从故事板初始化它,使用awakeFromNib函数应该可以正常工作:

class Banner: UIView {

    @IBOutlet weak var img: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()
        img.isUserInteractionEnabled = true
    }
 }

createSlides()函数中,为每个视图添加单独的点按手势:

let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapped)))

甚至更好的缩放和无代码冗余:

function tap() -> UITapGestureRecognizer {
    return UITapGestureRecognizer(target: self, action: #selector(tapped))
}

let slide1:banner = Bundle.main.loadNibNamed("banner", owner: self, options: nil)?.first as! banner
slide1.img.image = UIImage(named: "bannerex")
slide1.img.addGestureRecognizer(tap())

2
投票

UITapGestureRecognizer必须只使用一个视图,因此如果你想检测每个UITapGestureRecognizer上的点击,你需要为每个图像创建不同的image。阅读更多HERE

你需要为每个isUserInteractionEnabled设置trueimageView


0
投票

Image views默认忽略用户事件。如果您还希望图像视图处理用户交互,请将其isUserInteractionEnabled属性的值更改为true。

© www.soinside.com 2019 - 2024. All rights reserved.