SwiftUI 自定义标签栏:当用户在标签栏按钮上拖动手指时如何切换视图?

时间:2021-05-25 10:13:23

标签: ios swift swiftui gesture

我开发了一个自定义标签栏 (ready to paste playground source),但现在,除了用户点击按钮切换视图之外,我还希望能够在标签栏上滑动手指,并激活视图当我拖过标签栏按钮时。

我尝试在单个按钮上监听 DragGesture(minimumDistance: 0)。 这有助于在触摸时激活视图而不是触摸(这是默认按钮的工作方式),但只会激活用户开始拖动的按钮。

我假设我需要以某种方式将 .simultaneousGesture(DragGesture(minimumDistance: 0) 添加到整个标签栏,然后我可能会根据单个按钮点击测试来解释触摸坐标。

然而,这感觉不像 SwiftUI 的方式 - 有没有更简单的方法让 SwiftUI 完成繁重的工作?

(请注意 - 在操场上,我现在收到 AttributeGraph: cycle detected through attribute 2584 条通知,由于某种原因,实际选择比上次点击的按钮落后一键,但在 Xcode 项目中它可以正常工作。)

1 个答案:

答案 0 :(得分:0)

我不知道这是否是最佳解决方案,但我:

  1. 在每个按钮的全局坐标中保存一个框架

  2. 在标签栏上使用 DragGesture(minimumDistance: 0, coordinateSpace: .global),手动点击测试每个按钮

  3. 并使用 .allowsHitTesting(false) 禁用对单个按钮的命中测试,否则它们会“窃取”手势。

Here's a diff of changes