SwiftUI:拖动逻辑错误还是这是一个错误?

时间:2019-07-08 22:29:29

标签: ios swift iphone ios-simulator swiftui

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

这会导致以下行为:

iphone capture

据我所知,value.location DragGesture回调中的onChanged值不应在这样的数字之间波动。查看日志,到处都是数字。我想念什么吗?

1 个答案:

答案 0 :(得分:3)

DragGesture的默认CoordinateSpace.local,它是Circle内部的坐标空间。移动Circle会发生什么?由于手指不动,因此手指在Circle的几何形状中的位置突然改变,这导致Circle再次移动。重复广告恶心。

尝试使用CoordinateSpace.global

DragGesture(minimumDistance: 10, coordinateSpace: .global)

您可能还想使用value.translation而不是value.location来避免手指放下时的初始跳动。