電子コンパスを使って方角を取得する方法は、座標を取得するのとほぼ同じです。
コード
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 |