【swift3】電子コンパスを使って方角を取得してみる

電子コンパスを使って方角を取得する方法は、座標を取得するのとほぼ同じです。

コード

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate{

    var myLocationManager:CLLocationManager?

    var myHedingLabel:UILabel! // 方角表示用のラベル.

    override func viewDidLoad() {
        super.viewDidLoad()

        // 現在地の取得.
        myLocationManager = CLLocationManager()
        myLocationManager?.delegate = self
        myLocationManager?.requestWhenInUseAuthorization()

        // 方角表示用のラベルを生成.
        myHedingLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.view.bounds.width, height: 30))
        myHedingLabel.layer.position = CGPoint(x: self.view.bounds.width/2, y:self.view.bounds.height/2+100)

        myHedingLabel.text = "myHedingLabel"

        self.view.addSubview(myHedingLabel)

        // セキュリティ認証のステータスを取得.
        let status = CLLocationManager.authorizationStatus()

        // まだ認証が得られていない場合は、認証ダイアログを表示.
        if(status == CLAuthorizationStatus.notDetermined) {
            print("didChangeAuthorizationStatus:\(status)");
            // まだ承認が得られていない場合は、認証ダイアログを表示.
            self.myLocationManager?.requestAlwaysAuthorization()
        }

        myLocationManager?.headingFilter = kCLHeadingFilterNone // 何度動いたら更新するか(デフォルトは1度)
        myLocationManager?.headingOrientation = .portrait
        myLocationManager?.startUpdatingHeading()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    //---

    // 位置情報取得に成功したときに呼び出されるデリゲート.
    func locationManager(_ manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) {
        print("locationManager");

        // 方角の表示.
        myHedingLabel.text = "方角".appendingFormat("%.2f", newHeading.magneticHeading)
        myHedingLabel.textAlignment = NSTextAlignment.center

    }

    // 位置情報取得に失敗した時に呼び出されるデリゲート.
    func locationManager(_ manager: CLLocationManager,didFailWithError error: Error){
        print("error")
    }

}

方角

方角
0.0
90.0
180.0
西 270.0

関連記事