【发布时间】:2020-05-10 20:41:15
【问题描述】:
目前我正在开发一个需要检测 iPhone 是否启动和停止垂直移动的应用程序。我需要能够检测到一个相当短的(50-100 厘米)垂直距离,即如果一个人进行深蹲。
有没有办法计算Core Motion framework?
let motion = CMMotionManager()
if motion.isDeviceMotionAvailable {
self.motion.deviceMotionUpdateInterval = 1.0 / 60.0
self.motion.showsDeviceMovementDisplay = true
self.motion.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: .main, withHandler: { (data, error) in
if let validData = data {
// Just a random minimum acceleration threshold
if validData.userAcceleration.y > 3 {
print(validData.userAcceleration.y)
}
}
})
}
【问题讨论】:
-
核心位置的
CLLocationManager有一个高度属性,它作为CLLocation对象的一部分返回。但是刚刚注意到你写的是cm而不是m我想这不够准确:) -
您可以使用数学将加速度转换为速度,然后转换为位置变化。如果你曾经上过微积分课程,你就会知道会有一些讨厌的常数,所以你可能需要一个“校准”步骤,在这个步骤中你会要求用户保持静止,然后测量静态加速度(又名重力),或者您可以使用相机来获取这些额外数据。如果它只是为了深蹲,那么你可能只用数学就可以了。
标签: ios swift iphone cocoa-touch core-motion