今回の記事は地図アプリ作成の続きです。
地図アプリと言っても目的が今のところ定まっていませんが、前回までで指定の場所を表示することができているとも思います。まだのかたは下記記事をご参照ください。
今回の記事ではその続きといえば続きに当たりますが、現在地情報をSwiftを使ってアプリ内で表示、取得できるまでの記事になります。
地図アプリに現在地を表示させるXcode側の設定
まずはXcodeプロジェクトのディレクトリ何あるinfo.plistをクリックして見て下さい。

こちらをクリックするとたくさん表示がある一覧のページに飛びます。
その一覧のinfomation property listの横の+マークをクリックしてください。

すると選択欄が出てくるのでそちらで下記2項目を選んびます。

Privacy – Location When In Use Usage Description
Privacy – Location Always Usage Description
この設定項目の右横に文字を入力できますがこちらは現在地を取得し表示させていいかの確認の際に表示させる文字を記載することができます。
なんでもOkです。私はOk?を入力したのみ。
次にstoryboardに戻ります。
Mapkit viewをクリックして自身の設定位置情報を表示させ設定をほど施します。

これでXcode側の設定は完了です。
地図アプリに現在地を表示・取得させるソースコード
次に地図アプリに現在地を表示させる方法について記載いたします。
まず上記の段階でbuildするとどの様に表示されるかご紹介します。
mapのみの表示になっており現在地のマークなどは特に表示されていないと思います。
これを修正するためにDelegateを設定していきます。
コードは下記です。
import UIKit
import MapKit
import CoreLocation
class MapViewController: UIViewController,CLLocationManagerDelegate {
@IBOutlet weak var map: MKMapView!
var locationManager: CLLocationManager!
override func viewDidLoad() {
super.viewDidLoad()
locationManager = CLLocationManager()
locationManager.delegate = self
locationManager!.requestWhenInUseAuthorization()
}
// 許可を求めるためのdelegateメソッド
func locationManager(_ manager: CLLocationManager,didChangeAuthorization status: CLAuthorizationStatus) {
switch status {
// 許可されてない場合
case .notDetermined:
// 許可を求める
manager.requestWhenInUseAuthorization()
// 拒否されてる場合
case .restricted, .denied:
// 何もしない
break
// 許可されている場合
case .authorizedAlways, .authorizedWhenInUse:
// 現在地の取得を開始
manager.startUpdatingLocation()
break
default:
break
}
}
}
日本全土表示させるようにしています。
まずは現在地を使用するためにCoreLocationをインポートします。
そしてlocationmanagerというものを定義してそちらで全ての管理をこなっていきます。
そして現在地取得のdelegateの関数を記載して後はページロード時に全て読み込みをお行えば完了です。
正直深くまでわからなくとも上記コードでうまくいきます。
ただ私が一瞬ハマった落とし穴がエミュレータではどうやらこちら現在地を取得できない様です。
そのため実機での検証が必要ですのでそれだけは忘れずにです。

私が京都に生息していることはブログタイトルからお分かりかと思いますがきちんと表示されている様で満足です。
したの観光スポットなんとかボタンは無視して下さい。
コメント
[…] 【Swift】地図アプリで現在地取得を行う方法〜地図アプリ作成編③〜 […]