【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

関連記事

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA