如何检测哪个视图正在平移手势 Swift

Posted

技术标签:

【中文标题】如何检测哪个视图正在平移手势 Swift【英文标题】:How to detect which view is being pan gestured Swift 【发布时间】:2019-09-02 05:07:16 【问题描述】:

我有一个函数可以每秒向视图控制器添加一个UIImageView,并且我正在尝试使用UIPanGestureRecognizer 使这些图像视图中的每一个都可以拖动。但是,我不知道如何检测在我的选择器函数中拖动了许多图像视图中的哪一个。我不想将touchesBegan(_:with:) 函数与UIPanGestureRecognizer 一起使用,因为这可能会变得混乱。任何帮助将不胜感激。

到目前为止,这是我的代码:

    //Function that executes every second and adds imageView
    @objc func addBalloonToDrag()
        var myImageView=UIImageView()

        var fullWidth=Int(gameView.frame.width)
        var fullHeight=Int(gameView.frame.height)

        var widthMin=Int(gameView.frame.width*0.2)
        var widthMax=Int(gameView.frame.width*0.3)
        var randomWidth = 30
        var countdownLabelHeight=Int(countdownTimer.frame.height)

        var randomX=Int.random(in: 0...fullWidth-randomWidth)
        var randomY=Int.random(in: countdownLabelHeight...fullHeight-randomWidth)

        myImageView.frame=CGRect(x: randomX, y: randomY, width: randomWidth, height: randomWidth)

        var moodBalloonNames=["mood1","mood2","mood4","mood5"]
        var randomMoodBalloonInt=Int.random(in:0...moodBalloonNames.count)
        var randomBalloonName=moodBalloonNames[randomMoodBalloonInt]

        myImageView.image = UIImage(imageLiteralResourceName: "\(randomBalloonName)").withRenderingMode(.alwaysTemplate)

        //adding pan gesture recognizer to the image view
        var panGesture = UIPanGestureRecognizer(target: self, action: #selector(draggedView(_:)))
        myImageView.isUserInteractionEnabled = true
        myImageView.addGestureRecognizer(panGesture)

        gameView.addSubview(myImageView)
    

    @objc func draggedView(_ sender:UIPanGestureRecognizer)
        if (stopButton.titleLabel!.text == "  Pause  ")&&((totalSec != 0)||(totalMin != 0))
            let translation = sender.translation(in: self.view)

            //How do I know which view to drag here?
            viewDrag.center = CGPoint(x: viewDrag.center.x + translation.x, y: viewDrag.center.y + translation.y)
            sender.setTranslation(CGPoint.zero, in: self.view)
        
    

【问题讨论】:

【参考方案1】:

你可以看到panGestureRecognizer.view是一个imageView,然后是它的image属性。

【讨论】:

当我这样做时,我可以拖动最近出现的 imageView,但它不允许我拖动之前出现的 imageView。 我有一个名为 panGesture 的全局变量,它是一个 UIPanGestureRecognizer,我将它添加到所有图像视图中。我需要为每张图像制作一个新的识别器吗?如果是这样,我如何检测正确的识别器? @AudreyHa 您确实需要为每个图像视图创建一个识别器。这样,选择器函数中返回的识别器将返回相关的图像视图作为其view @Eilon 谢谢!在选择器函数中,我得到了带有“sender.view as?UIImageView”的图像视图,并且能够访问它。

以上是关于如何检测哪个视图正在平移手势 Swift的主要内容,如果未能解决你的问题,请参考以下文章

如果检测到超出范围,则禁用平移手势

在 iOS 中检测 PAN 手势的方向

Swift:当定时器触发时,如何阻止平移手势取消?

UI 平移手势不起作用

平移手势不会将触摸转发到 Mapbox MGLMapView

斯威夫特:如何设置最大/最小平移手势?