我开发了一个自定义标签栏 (ready to paste playground source),但现在,除了用户点击按钮切换视图之外,我还希望能够在标签栏上滑动手指,并激活视图当我拖过标签栏按钮时。
我尝试在单个按钮上监听 DragGesture(minimumDistance: 0)
。
这有助于在触摸时激活视图而不是触摸(这是默认按钮的工作方式),但只会激活用户开始拖动的按钮。
我假设我需要以某种方式将 .simultaneousGesture(DragGesture(minimumDistance: 0)
添加到整个标签栏,然后我可能会根据单个按钮点击测试来解释触摸坐标。
然而,这感觉不像 SwiftUI 的方式 - 有没有更简单的方法让 SwiftUI 完成繁重的工作?
(请注意 - 在操场上,我现在收到 AttributeGraph: cycle detected through attribute 2584
条通知,由于某种原因,实际选择比上次点击的按钮落后一键,但在 Xcode 项目中它可以正常工作。)
答案 0 :(得分:0)
我不知道这是否是最佳解决方案,但我:
在每个按钮的全局坐标中保存一个框架
在标签栏上使用 DragGesture(minimumDistance: 0, coordinateSpace: .global)
,手动点击测试每个按钮
并使用 .allowsHitTesting(false)
禁用对单个按钮的命中测试,否则它们会“窃取”手势。