许多ImageView的类似UITapGestureRecognizer操作

时间:2018-06-29 04:10:59

标签: swift xcode

我对Swift比较陌生。

我有很多图像(尽管现在我正在测试四个图像),这些图像正试图隐藏(暂时以确保基本代码正常工作,而我真的想在点击的图像下方插入一个图像)点击。

我已经创建了array中的ImageViews,一旦有了有效的代码,我打算对其进行扩展。我尝试使用UITapGestureRecognizers中的for循环将ImageView添加到每个addGestures()中,然后让selectImage()隐藏被点击的ImageView。代码编译没有错误,但是当点击其中一个图像时,失败并显示uncaught NSException。关于如何有效执行此操作的任何技巧,而无需为每个图像进行过多的手动编码?

Code attached

2 个答案:

答案 0 :(得分:0)

请检查以下代码

func addGestureRecognizer(){
    for imageView in imageArray{
        imageView.isUserInteractionEnabled = true

        let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap(gesture:)))
        imageView.addGestureRecognizer(tap)
    }
}

@objc func handleTap(gesture:UITapGestureRecognizer){
    let imageView = gesture.view
    imageView?.isHidden = true
}

在您的代码中,您传递的是ImageView而不是选择器上的手势。不过,您可以通过gesture.view获取imageView。

也不需要启用userInteraction的单独功能。

答案 1 :(得分:0)

您可以尝试

class GestureStackVC: UIViewController {

    /// Image Outlets
    @IBOutlet weak var img1: UIImageView!
    @IBOutlet weak var img2: UIImageView!
    @IBOutlet weak var img3: UIImageView!

    /// ImageView Array
    var imagesArray : [UIImageView]?

    /// Image Gesture
    var imageTapGesture : UITapGestureRecognizer?


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        /// Allocate Array
        imagesArray = [UIImageView]()

        /// Add Required Values
        imagesArray = [img1,img2,img3]

        /// Add gesture
        for imageView in imagesArray!{
            let tap = UITapGestureRecognizer(target: self, action: #selector(imageTapHandler(_:)))
            imageView.isUserInteractionEnabled = true
            imageView.addGestureRecognizer(tap)
        }
    }

    /// tap Handler
    @objc func imageTapHandler(_ sender: UITapGestureRecognizer) {
        /// Hide the Sender View
        sender.view?.isHidden = true
        /// Done
    }
}

具有3张图像的第一输出

enter image description here

在第一个ImageView1上单击时输出-隐藏其结果 enter image description here

在第一个ImageView2上单击时输出-隐藏其结果 enter image description here