如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage

Posted

技术标签:

【中文标题】如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage【英文标题】:How to Identify Tapped UIImage in UIImage array in Swift 【发布时间】:2017-06-08 13:26:47 【问题描述】:

我正在用代码填充 UIImage 数组并将它们成功添加到 UIScrollView 中。我想识别被点击的图像,以便我可以相应地执行操作。

感谢您的指导和时间。

这是我目前的代码:

    override func viewDidLoad() 
        super.viewDidLoad()

        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.imageTapped(_:)))
    

    func loadImagePicker()

    var contentWidth: CGFloat = 0.0
    let imageWidth: CGFloat = 100.0
    let imageHeight: CGFloat = 100.0

    for x in 0...2 
        let image = UIImage(named: "item\(x).png")
        let imageView = UIImageView(image: image)
        imageView.isUserInteractionEnabled = true
        myData.images1.append(imageView)

        var newX: CGFloat = 0.0

        newX = 10 + imageWidth * CGFloat(x) + (10 * CGFloat(x))

        contentWidth += newX

        scrollView.addSubview(imageView)

        imageView.frame = CGRect(x: newX, y: scrollView.frame.size.height, width: imageWidth, height: imageHeight)
        imageView.contentMode = .scaleToFill
    

    print(myData.images1.count)

    scrollView.clipsToBounds = false
    scrollView.contentSize = CGSize(width: contentWidth, height: scrollView.frame.size.height)

    imagePickerView.isHidden = false

【问题讨论】:

【参考方案1】:

将手势识别器添加到您的 imageView 中,如下所示:

    //Instance Variable
    let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.imageTapped(_:)))
    tapGestureRecognizer.numberOfTapsRequired = 1
    tapGestureRecognizer.numberOfTouchesRequired = 1

    func loadImagePicker()

        // .....

        for 0..<2  //Assuming there are two images

        // .....
        // .....

        imageView.addGestureRecognizer(tapGestureRecognizer)

        
    

    func imageTapped(_ sender: UITapGestureRecognizer) 

        let tappedImageView = sender.view as! UIImageView
        let index = tappedImageView.tag // Do anything with the index by using it in your array

    

【讨论】:

您好,Badhan,感谢您的回复。首先,循环中有三个图像,它也计数为 0。我试图打印索引。所以,我的三张图片加载了,你的代码识别出最后一张的点击,它打印/标记为 0。你能帮我为什么会这样吗? 哦,我意识到我的循环不会将 imageView.addGestureRecognizer(tapGestureRecognizer) 添加到所有图像。无法弄清楚为什么。只执行一次。这就是为什么它只被标记一次。但我可以在滚动视图中看到图像,所以它们就在那里。 好的,现在请尝试将手势初始化代码放入您的 for 循环而不是实例变量中。 Badhan,这行得通!非常感谢。但是,它仍然打印相同的标签,即 0。虽然,我已经设法在不使用标签的情况下获得了我想要的结果。再次感谢您!。【参考方案2】:

    将您的 tapGestureRecognizer 设为全局或将其移动到您的 loadImagePicker 函数中。

    设置isUserInteractionEnabled为true后,添加手势 通过调用imageView 识别器 imageView.addGestureRecognizer(tapGestureRecognizer)

    然后实现imageTapped 函数,该函数接受UITapGestureRecognizer 类型的发送者 最后在imageTapped函数中,通过调用sender as? UIImageView访问被点击的UIImageView

【讨论】:

以上是关于如何在 Swift 中识别 UIImage 数组中的 Tapped UIImage的主要内容,如果未能解决你的问题,请参考以下文章

Swift:如何从 UIImage 数组中提取图像文件名

如何在 Swift 中从文件夹中获取 UIImage 数组?

将一张图像分成多个部分后,如何在 Swift 中使用 UIImage 数组?

Swift中的像素数组到UIImage

Swift(iOS)将UIImage数组插入子视图?

如何在 Swift 4 中将 UIImage 转换为字节数组