import CoreMotion
///获取设备旋转角度
class YDMotionManager {
private let motionManager = CMMotionManager()
// 添加一个回调来传递计算出的角度
func getAngle(completion: ((_ angle: Double?)->())?) {
// 确保加速度计数据可用
if motionManager.isAccelerometerAvailable {
// 确保只启动一次加速度计更新
if !motionManager.isAccelerometerActive {
motionManager.startAccelerometerUpdates(to: .main) { [weak self] (data, error) in
guard let self = self else { return }
if let accelerometerData = data {
// 获取加速度数据
let acceleration = accelerometerData.acceleration
// 计算设备的旋转角度,假设我们要计算绕 Z 轴的旋转角度
let angle = atan2(acceleration.y, acceleration.x) * 180 / .pi
print("设备旋转角度:\(angle)度")
// 停止加速度计更新以节省资源
self.motionManager.stopAccelerometerUpdates()
// 通过回调传递计算出的角度
completion?(angle)
} else {
print("获取加速度计数据失败:\(String(describing: error))")
completion?(nil)
}
}
}
} else {
print("此设备上没有加速计")
completion?(nil)
}
}
}