swift - SwiftUI Carousel 中的自定义拖动手势
问题描述
我想创建一个自定义轮播(将来是一个快速轮播)。我尝试使用拖动手势,但每次拖动它时,它都会先返回 0,然后再拖动视图。我试图将statementpoint值添加到计算中,最终总是从500 ish开始
有没有其他方法可以做到这一点?如果没有,我该怎么做?
struct ScrollItem: View {
@Binding var offset:CGFloat
var body: some View {
HStack(spacing:10){
ForEach(0..<7){_ in
RoundedRectangle(cornerRadius: 10)
.frame(width: 200, height: 150, alignment: .center
}
}
.offset(x:offset)
.gesture(
DragGesture()
.onChanged({ val in
let startLoc = val.startLocation
self.offset = val.translation.width + startLoc.x // + startLoc.x
})
.onEnded({ val in
self.offset = val.translation.width
})
)
.animation(.easeInOut)
}
}
解决方案
您需要跟踪最后的偏移量。
struct ContentView: View {
@Binding var offset:CGFloat = .zero
@State var lastOffset: CGFloat = .zero
var body: some View {
HStack(spacing:10){
ForEach(0..<7){_ in
RoundedRectangle(cornerRadius: 10)
.frame(width: 200, height: 150, alignment: .center)
}
}
.offset(x:offset)
.gesture(
DragGesture()
.onChanged({ val in
self.offset = lastOffset + val.translation.width
})
.onEnded({ val in
lastOffset = offset
})
)
.animation(.easeInOut)
}
}
推荐阅读
- reactjs - 从打字稿中未包装的 Promise 类型中选择推断类型
- linux - 如何在 MacOS(或 Linux)的笔记本电脑睡眠模式下调查哪个进程导致唤醒?
- node.js - Angular http put请求不发送标头
- javascript - 如何使用 React 列出表格中的元素?
- ios - 快速转换为泛型类类型
- mysql - 在本地 docker 容器上连接 MySQL 时出错:ERROR 2002 (HY000): Can't connect to MySQL server on '127.0.0.1' (115)
- python - 使用“root.protocol”将参数传递给使用 Tkinter 中的默认退出窗口按钮分配的函数的问题
- c++ - Qt QSlider 更改小部件时的奇怪行为
- sql - 计算用多个空格分隔的单词的频率
- javascript - 反应:将 Child1 状态值传递给 Parent 并从 parent 传回 Child2