我对 CoreMotion 很陌生,但我正在尝试构建一个使用 CoreMotion 来查看用户是否在上下跳动的应用程序(想想跳绳)。它还需要让用户能够以他们想要的方式(横向、纵向、奇怪的倾斜方式等)握住他们的手机(没有 iWatch),并且仍然能够判断他们是否在上下移动。我想这有点像“扔手机”应用程序,但没有测量距离。
所以我使用 userAcceleration 和重力通过检查不同重力轴的值来查看哪个方向是“向下”的,它工作正常,但感觉像是一种笨拙的方式。
有没有更好的方法来做我正在做的事情?基本上,当前应用程序需要能够判断是否存在垂直于地面的加速度(无论您如何握住手机)。
import UIKit
import CoreMotion
class TestViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
startJump()
}
func startJump() {
if CMMotionManager.shared.isDeviceMotionAvailable {
CMMotionManager.shared.deviceMotionUpdateInterval = 0.01
CMMotionManager.shared.startDeviceMotionUpdates(to: OperationQueue.current!) { (data, error) in
guard let myData = data else {
return
}
var gravX = abs(myData.gravity.x)
var gravY = abs(myData.gravity.y)
var gravZ = abs(myData.gravity.z)
var userX = abs(myData.userAcceleration.x)
var userY = abs(myData.userAcceleration.y)
var userZ = abs(myData.userAcceleration.z)
if gravZ > 0.9 && userZ > 1 {
print("Jump; Z is up")
}
if gravX > 0.9 && userX > 1 {
print("Jump; X is up ")
}
if gravY > 0.9 && userY > 1 {
print("Jump; Y is up")
}
}
}
}
override func viewDidDisappear(_ animated: Bool) {
CMMotionManager.shared.stopDeviceMotionUpdates()
}
}