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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:45:18