SwiftUI处于Beta测试阶段,因此也许是一个错误,但是我在其他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
这会导致以下行为:
据我所知,value.location
DragGesture
回调中的onChanged
值不应在这样的数字之间波动。查看日志,到处都是数字。我想念什么吗?
答案 0 :(得分:3)
DragGesture
的默认CoordinateSpace
是.local
,它是Circle
内部的坐标空间。移动Circle
会发生什么?由于手指不动,因此手指在Circle
的几何形状中的位置突然改变,这导致Circle
再次移动。重复广告恶心。
尝试使用CoordinateSpace.global
:
DragGesture(minimumDistance: 10, coordinateSpace: .global)
您可能还想使用value.translation
而不是value.location
来避免手指放下时的初始跳动。