我在 SwiftUI 中使用DragGesture().onChanged()
来获取拖动速度(一个CGSize
值),它是一个向量。
有没有一种简单的方法可以获取 CGSize 向量的大小而无需手动进行数学计算?
我正在使用的简化代码,用于上下文:
Circle()
.simultaneousGesture(
DragGesture(minimumDistance: 0)
.onChanged({ tap in
print(tap.velocity) // the vector I want the magnitude of
})
)
编辑:我知道数学可以类似于下面的那样完成,但我怀疑这不是最佳/性能最好的解决方案:
let velocityMagnitude: Double = sqrt(pow(tap.velocity.width, 2) + pow(tap.velocity.height, 2))
您想要的工具是
hypot
:您的方法不高效,这是正确的,但这只是因为使用了
pow
,这不是一个好的平方工具。与简单的乘法相比,它有很多开销。更好的代码(如果
hypot
不可用)是:除了方便之外,它的优点还
hypot
在于它可以更好地处理非常大和非常小的值,而不会溢出或下溢。对于这种工作,这没什么大不了的,事实上,手动完成可能会更快一点,因为它不会做处理极值所需的额外工作。但我建议使用,hypot
除非你有充分的理由不这样做。