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)
}
}
}
}
我有一个项目,我要在视图控制器的视图中添加三个 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)
}
}
}
}