如何仅在 swiftUI 中将拖动手势限制为特定帧
How to restrict drag gesture to particular frame only in swiftUI
我只想在水平框架内拖动圆形。我尝试下面的代码,你可以看到形状完美地水平工作,也可以在左侧工作,但是当拖动右侧形状时,将其向上拖动到设备框架之外。我检查了很多答案,但没有任何效果。也尝试添加 .onEnded
但不起作用。
请帮我
提前致谢
这是我试过的代码
struct ProgressIndicator: View {
@State private var position = CGSize.zero
var body: some View {
GeometryReader { geometry in
VStack(alignment: .leading) {
ZStack {
Circle()
.foregroundColor(Color.blue)
.opacity(0.3)
.frame(width: 40, height: 40, alignment: .leading)
.padding(.bottom, -12)
}
.gesture(
DragGesture()
.onChanged({ (value) in
self.position.width += value.location.x
})
)
.offset(x: self.position.width - 20, y: 0)
}
}
}
}
这里是左右拖动的圆形截图
您可以通过GeometryReader
限制位置:
self.position.width = min(self.position.width + value.location.x, geometry.size.width / 2)
这是 Playgrounds 的结果:
我只想在水平框架内拖动圆形。我尝试下面的代码,你可以看到形状完美地水平工作,也可以在左侧工作,但是当拖动右侧形状时,将其向上拖动到设备框架之外。我检查了很多答案,但没有任何效果。也尝试添加 .onEnded
但不起作用。
请帮我
提前致谢
这是我试过的代码
struct ProgressIndicator: View {
@State private var position = CGSize.zero
var body: some View {
GeometryReader { geometry in
VStack(alignment: .leading) {
ZStack {
Circle()
.foregroundColor(Color.blue)
.opacity(0.3)
.frame(width: 40, height: 40, alignment: .leading)
.padding(.bottom, -12)
}
.gesture(
DragGesture()
.onChanged({ (value) in
self.position.width += value.location.x
})
)
.offset(x: self.position.width - 20, y: 0)
}
}
}
}
这里是左右拖动的圆形截图
您可以通过GeometryReader
限制位置:
self.position.width = min(self.position.width + value.location.x, geometry.size.width / 2)
这是 Playgrounds 的结果: