Swift iOS:当用户 drags/slides 将手指放在 UILabel 上时进行检测?

Swift iOS: Detect when a user drags/slides finger over a UILabel?

我有一个项目,我要在视图控制器的视图中添加三个 UILabel。当用户开始在屏幕上移动他们的手指时,我希望能够确定他们的手指何时在这些 UILabel 上移动。

我假设 UIPanGestureRecognizer 是我需要的(当用户在屏幕上移动他们的手指时)但我不确定在哪里添加手势。 (我可以向 UILabel 添加点击手势,但这不是我需要的)

假设我将 UIPanGestureRecognizer 添加到主视图,我将如何完成它?

if gesture.state == .changed { 
    // if finger moving over UILabelA… 
    // …do this 
    // else if finger moving over UILabelB… 
    // …do something else 
}

您可以使用 UIPanGestureRecognizer 或实施 touchesMoved(...) 来做到这一点 - 使用哪种取决于您可能正在做的其他事情。

对于平移手势,将识别器添加到 view(而不是标签):

@objc func handlePan(_ g: UIPanGestureRecognizer) {
    
    if g.state == .changed {
        // get the location of the gesture
        let loc = g.location(in: view)
        // loop through each label to see if its frame contains the gesture point
        theLabels.forEach { v in
            if v.frame.contains(loc) {
                print("Pan Gesture - we're panning over label:", v.text)
            }
        }
    }
    
}

使用触摸,无需添加手势识别器:

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    if let t = touches.first {
        // get the location of the touch
        let loc = t.location(in: view)
        // loop through each label to see if its frame contains the touch point
        theLabels.forEach { v in
            if v.frame.contains(loc) {
                print("Touch - we're dragging the touch over label:", v.text)
            }
        }
    }
}