swiftui - 获得阻力速度的最佳方法是什么?

标签 swiftui gesture draggesture

我想知道怎么才能得到DragGesture速度?
我了解公式的工作原理以及如何手动获取它,但是当我这样做时,Apple 返回的内容并不存在(至少有时非常不同)。
我有以下代码片段

struct SecondView: View {
    @State private var lastValue: DragGesture.Value?

    private var dragGesture: some Gesture {
        DragGesture()
             .onChanged { (value) in
                   self.lastValue = value
             }
             .onEnded { (value) in
                   if lastValue = self.lastValue {
                         let timeDiff = value.time.timeIntervalSince(lastValue.time)
                         print("Actual \(value)")   // <- A
                         print("Calculated: \((value.translation.height - lastValue.translation.height)/timeDiff)") // <- B
                   }
             }

     var body: some View {
          Color.red
              .frame(width: 50, height: 50)
              .gesture(self.dragGesture)
     }
}
从上面:A将输出类似 Value(time: 2001-01-02 16:37:14 +0000, location: (250.0, -111.0), startLocation: (249.66665649414062, 71.0), velocity: SwiftUI._Velocity<__C.CGSize>(valuePerSecond: (163.23212105439427, 71.91841849340494))) 的内容B将输出类似 Calculated: 287.6736739736197 的内容
来自 A 的注释我正在查看 valuePerSecond 中的第二个值这是 y velocity .
根据您拖动的方式,结果会有所不同或相同。 Apple 将速度作为属性提供,就像 .startLocation 一样和 .endLocation但不幸的是,我无法访问它(至少我知道没有)所以我必须自己计算,理论上我的计算是正确的,但它们与Apple有很大不同。那么这里的问题是什么?

最佳答案

像这样:

let sss = "\(value)"
//Intercept string
let start = sss.range(of: "valuePerSecond: (")
let end = sss.range(of: ")))")
let arr = String(sss[(start!.upperBound)..<(end!.lowerBound)]).components(separatedBy: ",")
print(Double(arr.first!)!)

关于swiftui - 获得阻力速度的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62906109/

相关文章:

ios - Flutter WillPopScope 禁用 IOS 中向左滑动返回

input - 双鼠标输入 - 模拟多点触控

SwiftUI DragGesture() 在屏幕上获取开始位置

ios - 如何在 SwiftUI 中禁用 iOS 可达性滑动手势

SwiftUI 在滚动列表期间停止更新

ios - SwiftUI:当有 `.id(UUID())` 时,列表会在选择一行时向上滚动

java - Android - GestureDetection 强制关闭应用程序

ios - 在 SwiftUI 中的 ForEach 内将拖动手势添加到图像

ios - 如何仅在 ScrollView 中禁用滚动而不在内容 View 中禁用滚动?

SwiftUI 导航栏颜色