SwiftUI:拖动逻辑错误或者这是一个错误?
SwiftUI: Error in dragging logic or is this a bug?
SwiftUI 处于测试阶段,所以这可能是一个错误,但我在其他 YouTube 视频中看到过类似的东西,所以也许不是,测试非常简单。我正在创建一个可以水平拖动的圆圈。
import SwiftUI
struct ContentView : View {
@State private var location = CGPoint.zero
var body: some View {
return Circle()
.fill(Color.blue)
.frame(width: 300, height: 300)
.gesture(
DragGesture(minimumDistance: 10)
.onChanged { value in
print("value.location")
print(value.location)
self.location = CGPoint(
x: value.location.x,
y: 0)
}
)
.offset(x: self.location.x, y: self.location.y)
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
这会导致行为:
据我所知,DragGesture
onChanged
回调中的 value.location
值不应该像这样在数字之间波动。查看日志,数字无处不在。我错过了什么吗?
DragGesture
的默认CoordinateSpace
是.local
,也就是你Circle
里面的坐标space。当你移动 Circle
时会发生什么?由于您的手指没有移动,因此您的手指在 Circle
几何图形中的位置突然发生变化,从而导致 Circle
再次移动。重复广告令人作呕。
尝试使用 CoordinateSpace.global
:
DragGesture(minimumDistance: 10, coordinateSpace: .global)
您可能还想使用 value.translation
而不是 value.location
来避免在您放下手指时的初始跳跃。
SwiftUI 处于测试阶段,所以这可能是一个错误,但我在其他 YouTube 视频中看到过类似的东西,所以也许不是,测试非常简单。我正在创建一个可以水平拖动的圆圈。
import SwiftUI
struct ContentView : View {
@State private var location = CGPoint.zero
var body: some View {
return Circle()
.fill(Color.blue)
.frame(width: 300, height: 300)
.gesture(
DragGesture(minimumDistance: 10)
.onChanged { value in
print("value.location")
print(value.location)
self.location = CGPoint(
x: value.location.x,
y: 0)
}
)
.offset(x: self.location.x, y: self.location.y)
}
}
#if DEBUG
struct ContentView_Previews : PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
这会导致行为:
据我所知,DragGesture
onChanged
回调中的 value.location
值不应该像这样在数字之间波动。查看日志,数字无处不在。我错过了什么吗?
DragGesture
的默认CoordinateSpace
是.local
,也就是你Circle
里面的坐标space。当你移动 Circle
时会发生什么?由于您的手指没有移动,因此您的手指在 Circle
几何图形中的位置突然发生变化,从而导致 Circle
再次移动。重复广告令人作呕。
尝试使用 CoordinateSpace.global
:
DragGesture(minimumDistance: 10, coordinateSpace: .global)
您可能还想使用 value.translation
而不是 value.location
来避免在您放下手指时的初始跳跃。