SwiftUI中如何检测起始于Stack View外部的拖拽事件?
SwiftUI拖拽手势跨视图响应问题
在SwiftUI界面中,存在绿色主视图与红色子视图,需要实现绿色视图的滑动/拖拽交互检测,但遇到如下场景问题:
问题场景
- 失败场景:拖拽手势起始于红色视图外的绿色区域,滑动经过红色视图时,无法触发红色视图的
onChange事件 - 正常场景:拖拽手势起始于红色视图上时,可正常触发
onChange事件并追踪拖拽手势
已尝试的无效方案
- 设置拖拽坐标的坐标空间及相关视图
- 添加多个
simultaneousGesture手势识别器
示例代码
可直接在Xcode Playgrounds或演示应用中运行:
import PlaygroundSupport import SwiftUI PlaygroundPage.current.needsIndefiniteExecution = true struct DemoView: View { var body: some View { VStack { VStack { Text("3") } .id("RED") .frame(width: 200, height: 300, alignment: .center) .background(.red) .simultaneousGesture( DragGesture() .onChanged({ print("🔴", $0.location) }) ) } .id("GREEN") .frame(width: 400, height: 700, alignment: .center) .background(.green) .simultaneousGesture( DragGesture() .onChanged({ print("🟢", $0.location) }) ) } } let view = DemoView() PlaygroundPage.current.setLiveView(view)
内容的提问来源于stack exchange,提问作者Ramis
相关产品推荐
相关产品推荐

