Swift 指南针实现

 @IBOutlet weak var compassView: UIImageView!
    lazy var locationM : CLLocationManager =
        {
       let locationM = CLLocationManager()
        locationM.delegate = self
        if #available(iOS 8.0, *)
        {
            locationM.requestAlwaysAuthorization()
            locationM.pausesLocationUpdatesAutomatically = false
            
            if #available(iOS 9.0, *)
            {
                locationM.allowsBackgroundLocationUpdates = true // IOS 9.0之后使
            }

        }

            locationM.distanceFilter = 100
            locationM.desiredAccuracy = kCLLocationAccuracyBest
            
        return locationM
    }()
     override func viewDidLoad()
    {
        super.viewDidLoad()
       
        view.backgroundColor = UIColor.systemPink
        
        // 2. 使用位置管理者, 获取当前设备朝向
        // "磁力计"传感器
        
        if CLLocationManager.headingAvailable()
        {
            locationM.startUpdatingHeading()
        }else
        {
            print(" 磁力器不可用")
            
        }
    }
    //朝向更新
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading)
    {
       // 1. 拿到当前设备朝向
        /// 0- 359.9 角度
        //磁力朝向
        let angle = newHeading.magneticHeading
        print(angle)
        
        //2换算成弧度
        
        let hudu = CGFloat(angle) / 180  * CGFloat.pi
        
        //根据弧度转动图片
        UIView.animate(withDuration: 0.5)
        {
            self.compassView.transform = CGAffineTransform(rotationAngle: -hudu)
            
        }
            
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。