我对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()
}
}