SwiftUI 拖动手势

3
我刚开始学习SwiftUI。我正在使用HStack来显示一系列项目。它们不需要移动,但是我希望当用户用手指在它们上面滑动时能够突出显示它们,并在其他某个地方更改单独视图,以提供有关突出显示的项目的更多信息,而不必让用户抬起手指。他们应该能够来回滑动并看到手指下方的突出显示的项目和单独视图的内容更新。
在UIKit中,我会创建一个UIPanGestureRecognizer,当识别手势时,获取正确的视图来响应识别器的位置,设置该视图为被突出显示,设置任何其他视图为不被突出显示,并更新详细视图。
然而我现在不能想出如何在SwiftUI中实现这一点。我不想拖动任何东西,只想在用户将手指滑动到上方时获取位于下方的视图。

2
在你的视图上使用 gesture 修饰符和 DragGesture - Asperi
@Asperi 使用这个,我怎样才能找出用户当前正在触摸的视图堆栈中的哪个视图? - CompC
@CompC你找到一个好的解决方案了吗?我希望能做类似的事情 - ephemer
1个回答

1
我猜这样的东西可以帮助你:

struct ContentView: View {
    var body: some View {
        VStack {
            Text("Hello, World!")
            Text("Hello, World!")
        }
        .gesture(
            DragGesture()
                .onChanged({ value in print(value) })
                .onEnded({ _ in print("End")})
        )
    }
}

我该如何在onChanged块内获取用户正在触摸的堆栈中的哪个视图? - CompC
@CompC 我不太明白你的目的。在SwiftUI的领域中,你应该像在UIKit的领域中一样专注于具体的视图。你应该关注状态及其与SwiftUI的“View”的绑定。 - wzso
我在同一个应用程序中同时使用SwiftUI和UIKit。我在SwiftUI中构建了一个控件,当用户在HStack中拖动视图时,包含SwiftUI视图的UIViewController需要获得回调,并返回用户触摸的HStack中视图的索引。 - CompC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接