使用 tapGesture 自定义 UIView

Posted

技术标签:

【中文标题】使用 tapGesture 自定义 UIView【英文标题】:Custom UIView with tapGesture 【发布时间】:2016-08-18 12:32:54 【问题描述】:

我有一个绘图应用程序。在我的 VC 里面有五个 imageViews,里面有五种颜色。我希望能够单击 imageView 并更改笔触颜色。如果我通过向每个 UIImageView 添加手势识别器并具有它们各自的“选择器”功能来在视图控制器中重复自己,则可以轻松完成。比如

func redTapped() 
func blueTapped() 

但是,我希望能够通过为这些 ImageViews 创建自定义类 (ColorImageView.Swift) 来使代码更清晰,这样当我将类分配给这些按钮时,它们会自动获取点击手势和我的 VC接收关于哪个被窃听的信息。目前,我可以为分配给我的班级的每张图像打印一个“imagePressed”。但是,我无法区分被按下的是哪一个。下面是我的 ColorImageView.Swift 代码

import Foundation

class ColorImageView: UIImageView 

    private func initialize() 
        let touchGesture = UITapGestureRecognizer(target: self, action: #selector(ColorImageView.imagePressed(_:)))
        touchGesture.numberOfTapsRequired = 1
        self.userInteractionEnabled = true
        self.addGestureRecognizer(touchGesture)
    

    override init(frame: CGRect) 
        super.init(frame: frame)
        initialize()
    

    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        initialize()
    

    func imagePressed(gestureRecognizer: UITapGestureRecognizer) 
        print("image pressed \(gestureRecognizer)")
    

我的 imageView 名称是 red.png、green.png、blue.png...等

谢谢

【问题讨论】:

请显示您的 ViewController 编码我的意思是您将 ColorImageView 添加到 ViewController 我的 VC 还没有任何代码。我希望能够首先区分哪个 imageView 是从自定义类中提取的。完成后,我可以使用协议将信息传递给我的 VC。目前,当我按下 imageView 时,我可以打印出如下内容..... 按下图像 ; target= )>> 图片是在哪里设置的? 我的图像位于我的 EditImageViewController 中,并在 VC 中声明了 IBOutletes。附上VC IBOutlet weak var redImageView: ColorImageView的截图! 请显示附加的屏幕截图 【参考方案1】:

您可以轻松获取标签。它工作正常。

func imagePressed(gestureRecognizer: UITapGestureRecognizer)

   print("image pressed \(gestureRecognizer)")
   let tappedImageVIew = gestureRecognizer.view as! UIImageView
   print("image pressed \(tappedImageVIew.tag)")

【讨论】:

像魅力一样工作!非常感谢

以上是关于使用 tapGesture 自定义 UIView的主要内容,如果未能解决你的问题,请参考以下文章

swift自定义上下文菜单previewprovider不能点击里面的任何视图(使用tapgesture)

使用 UITapGestureRecognizer 和两个按钮查看

UICollectionViewCell 上的不需要的 UIView(TapGesture 不起作用)

如何在 UIView 中为 UIImageView 添加 tapGesture

可以使用自定义 UIViewController 但没有自定义 UIView 类来实现手势识别吗?

在界面生成器中使用现有的自定义 UIView