【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

関連記事