You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI高优先级手势如何获取触摸位置?普通Tap手势为何可返回CGPoint

解决SwiftUI高优先级手势无法获取触摸位置的问题

为什么普通Tap修饰符能拿到位置,高优先级手势不行?

  • 普通的.tapGesture(onEnded:)是视图级修饰符,它的闭包参数是系统自动传入的触摸位置CGPoint,这是该修饰符的封装特性。
  • 而TapGesture()是独立的手势结构体,它的onEnded闭包没有位置参数——不管把它放到.highPriorityGesture还是.gesture里,都拿不到位置,和高优先级本身无关。

如何在高优先级手势中获取触摸位置?

用DragGesture(minimumDistance: 0)替代TapGesture,因为DragGesture可以捕获触摸位置,设置minimumDistance: 0后,它会在触摸结束时触发,效果和Tap一致:

.highPriorityGesture(
    DragGesture(minimumDistance: 0)
        .onEnded { value in
            let touchLocation = value.location
            print("触摸位置:\(touchLocation.x), \(touchLocation.y)")
        }
)
  • 若需要区分Tap和长按,可结合updating方法或设置maximumDistance限制拖拽范围,确保只有点击动作触发。
  • 也可以通过GestureState实时跟踪触摸位置,但对于Tap场景,直接用DragGesture的onEnded获取最终位置更简洁。

内容的提问来源于stack exchange,提问作者Ahmed Zaidan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:19:50