小编Ben*_*son的帖子

SwiftUI ScrollView 手势识别器

如何检测 ScrollView 何时被拖动?

在我的 ScrollView 中,我有一个@Binding scrollPositionOffset变量,我.onChange(of:)可以使用该变量进行观察,然后使用ScrollViewReader.scrollTo(). scrollPositionOffset这很好用,但当我直接滚动 ScrollView 时,我还需要更新。我正在努力做到这一点,因为这会触发.onChange(of:)关闭并进入循环。

我的解决方案是ScrollViewReader.scrollTo()仅当我将localScrolling变量设置为 false 时才进行有条件调用。我尝试使用DragGesture.onChanged和进行设置.onEnded,但这与导致滚动的拖动手势不同,因此.onEnded永远不会触发。

我认为我需要的是类似于 UIScrollView 的 ScrollView 的 @GestureRecognizerisDraggingisTracking(我知道我可以使用 UIScrollView,但我不知道如何使用,这似乎可能需要更多工作!!我会接受答案这也向我展示了如何将其放入 SwiftUIView 中)

上下文(如果有人对我的实际情况有更清晰的解决方案):

我有一个 ScrollView,我正在以编程方式滚动它,以创建类似于 Xcode 中的 Minimap 视图的效果(即,我有一个与 ScrollView 相邻的缩小视图,拖动小地图会导致 ScrollView 滚动)。

当我使用小地图时,这非常有用,但我很难实现相反的情况:移动 ScrollView 的位置来更新小地图视图。

代码


@Binding var scrollPositionOffset: CGFloat
let zoomMultiplier:CGFloat = 1.5

 var body: some View{
        
        ScrollViewReader { scrollViewProxy in
            GeometryReader{ geometry in …
Run Code Online (Sandbox Code Playgroud)

gesture-recognition ios swift swiftui swiftui-scrollview

4
推荐指数
1
解决办法
2200
查看次数