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)
        }
    }
}

  

posted on 2025-03-13 13:57  懂事长qingzZ  阅读(29)  评论(0)    收藏  举报