【问题标题】:use tap gesture reconigzier on multiple image views在多个图像视图上使用点击手势识别器
【发布时间】:2019-12-16 13:29:31
【问题描述】:

我下面的 swift 代码在 uiview 控制器上放置了 2 个不同的图像视图。当用户点击 imageivew 时,我希望该特定的 imageview 改变颜色。我不知道如何将该方法应用于多个图像视图。我想你会使用 sender 方法。

import UIKit

class ViewController: UIViewController {
var slider = UISlider()
var image1 = UIImageView()
var image2 = UIImageView()
var with = 80

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    [slider,image1,image2].forEach{
        $0.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview($0)
        $0.backgroundColor = .systemOrange
    }

    slider.frame = CGRect(x: view.center.x-115, y: view.center.y+200, width: CGFloat(with), height: 30)
    image1.frame = CGRect(x: view.center.x-115, y: view.center.y, width: CGFloat(with), height: 30)
    image2.frame = CGRect(x: view.center.x-115, y: view.center.y-200, width: CGFloat(with), height: 30)

    slider.minimumValue = 10
    slider.maximumValue = 150



    image1.isUserInteractionEnabled = true


    let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
    image1.addGestureRecognizer(gestureRecognizer)
    image2.addGestureRecognizer(gestureRecognizer)



}


@objc func imageViewTapped(sender: UITapGestureRecognizer) {
    if let imageView = sender.view as? UIImageView {

        imageView.backgroundColor = .yellow



    }
}
}

【问题讨论】:

  • 如果您不打开用户交互,您将不会在任何图像视图上获得任何点击!
  • 作为建议,我会在您的 var 名称和方法签名中更具描述性(例如:ji(sender:)
  • @matt 添加了用户交互启用
  • @Adrian 根据您的建议更改了我的代码。
  • 事情正在发生,但我仍然没有看到任何代码,您可以在图像视图上放置点击手势识别器。您似乎已经注释掉了一些内容。 imageViewTapped 永远不会被调用,因为您没有使用调用它的一个东西,即点击手势识别器。

标签: swift imageview uitapgesturerecognizer sender


【解决方案1】:

我试过你的代码:

添加以下两行以启用@matt 提到的用户交互:

image1.isUserInteractionEnabled = true
image2.isUserInteractionEnabled = true

并为手势创建两个单独的对象:

let gestureRecognizer1 = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
image1.addGestureRecognizer(gestureRecognizer1)

let gestureRecognizer2 = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
image2.addGestureRecognizer(gestureRecognizer2)

输出:

编码愉快...

【讨论】:

  • 我该如何编码,这样任何被点击的图像视图都会变成黄色。假设用户使用一个函数来添加一个未在视图中声明的图像视图确实加载了。希望这是有道理的。理想情况下不是一对一配对。
  • @maxSmtih 请检查这个stackoverflow.com/questions/4747238/…,这可能会有所帮助。谢谢
【解决方案2】:

UIGestureRecognizer 将与单个视图一起使用。因此,您需要为两个不同的视图创建两个单独的 UITapGestureRecognizer 对象。

例如:-

let image1GestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))
image1.addGestureRecognizer(image1GestureRecognizer)

let image2GestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageViewTapped))   
image2.addGestureRecognizer(image2GestureRecognizer)

【讨论】:

  • 我该如何编码,这样任何被点击的图像视图都会变成黄色。假设用户使用函数添加未在视图中声明的图像视图确实加载。希望这是有道理的。理想情况下不是一对一配对。
猜你喜欢
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-12
相关资源
最近更新 更多