スポンサーリンク

【Swift】MapKitで現在地を表示する方法。

Swift
スポンサーリンク

今回の記事はSwiftでiOSアプリに地図を表示するMapKitを使って現在地を表示する方法に関する記事です。地図アプリで現在地を表示することはよくあると思います。MapKitを使って現在地を表示させたいと考えている方は是非参考にしてみてください。

スポンサーリンク

XcodeにMapKitを追加

cocoapodでライブラリのインストールなどは行う必要はありません。まずは、既存のフレームワーク「MapKit.Framework」をXcodeプロジェクトに追加します。(下記図参照)

「+ボタン」を押すとXcode内に元々入っているフレームワークの一覧が表示されます。ここでMapなどで検索すれば「MapKit.Framework」が出てきますのでaddを押します。

これでMapKitがXcodeプロジェクトに追加されましたのでstoryboardでMapKitを使用していきます。

Xcodeの右上の「+ボタン」を押してMapKitViewをstoryboardに追加します。画面いっぱいに広げてみましょう。

MapKitで地図を表示

MapKitに地図を表示させるだけの場合は、特にソースコードでの実装は不要です。

この地図上で何か操作を行う場合のみソースコードでの実装が必要です。

この状態でアプリをbuildすると下記のように地図を表示できます。

では現在地を表示させていきます。

MapKitで現在地を表示する方法

上記までの流れで、地図を表示させるところまではできたと思います。では次に初期表示を現在地にしてみましょう。

「info.plist」に現在地取得の設定を追加

現在地を取得するためにはXcodeの「info.plist」に設定を追加する必要があります。

まずはXcodeプロジェクトのディレクトリの「info.plist」をクリックして見て下さい。

こちらをクリックするとたくさん表示がある一覧のページに飛びます。

その一覧の「infomation property list」の横の「+マーク」をクリックしてください。

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

  • Privacy – Location When In Use Usage Description
  • Privacy – Location Always Usage Description

この設定項目の右横に文字を入力できます。こちらがアプリで現在地を取得して良いかという許可をユーザに表示させるものです。

とりあえずOKなど適当な文字を設定しましょう。

MapKitの設定

MapKitのViewにユーザの現在地を取得する設定をします。

これでXcode関連の設定は完了です。

現在地を表示させるソースコード実装

次にMapKitで現在地を表示させる方法です。CLLLocationManagerDelegateを地図を表示させる画面に紐ずくViewControllerのクラスに追加します。

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
            }
        }
  

}

コードの解説を行います。

@IBOutlet weak var map: MKMapView!

MapKitのViewをIBOutletで紐付けます。

var locationManager: CLLocationManager!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        locationManager = CLLocationManager()
        locationManager.delegate = self
        locationManager!.requestWhenInUseAuthorization()
    }

上記の部分でCLLocationManagerにユーザの現在地をセットします。「locationManager!.requestWhenInUseAuthorization()」で認証をしています。

日本全土表示させるようにしています。

まずは現在地を使用するためにCoreLocationをインポートします。

そしてlocationmanagerというものを定義してそちらで全ての管理をこなっていきます。

そして現在地取得のdelegateの関数を記載して後はページロード時に全て読み込みをお行えば完了です。

正直深くまでわからなくとも上記コードでうまくいきます。

ただ私が一瞬ハマった落とし穴がエミュレータではどうやらこちら現在地を取得できない様です。

そのため実機での検証が必要ですのでそれだけは忘れずにです。

では、今回の記事は以上です。他にも多数のSwift関連の記事を記載しているので是非参考にしてみてください。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Swift
スポンサーリンク
スポンサーリンク

コメント

タイトルとURLをコピーしました