【问题标题】:How to create own ScrollView using DragGesture?如何使用 DragGesture 创建自己的 ScrollView?
【发布时间】:2021-01-28 08:54:55
【问题描述】:

我正在尝试在我自己的自定义组件中模仿 ScrollView 行为。

我遇到的问题是滚动动画。据我了解,我可以使用 predictedEndTranslation 对象来获取拖动手势的预测位置。但我不知道应该使用哪个缓动函数来模仿默认的ScrollView 缓动。

这是我的代码

struct ViewContent: View {
    @State var offsetY: CGFloat = 0

    var body: some View {
        View {

        }
        .offset(y: offsetY)
        .gesture(
          DragGesture()
            .onChange { value in
                offsetY = value.translation.height
            }
            .onEnded { value in 
                let nextScrollPosition = value.predictedEndTranslation.height

                withAnimation(???) { // What easing to use?
                    offsetY = nextScrollPosition
                }
            }
        )
    }
}

【问题讨论】:

标签: swift swiftui


【解决方案1】:

我会使用.spring(),因为这个预设动画会让你接近通用的滚动视图动画。

withAnimation(.spring()) { // User .spring()
    offsetY = nextScrollPosition
}

【讨论】:

  • 谢谢,我尝试使用这个.spring(),但不确定这个缓动是否是最好的
  • 请问您为什么不能使用常规滚动视图?
  • 我想实现默认 ScrollView 不支持的 snap 间隔(停在最近的行或列,而不是中间或其他地方)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2015-06-10
  • 1970-01-01
相关资源
最近更新 更多