LoginSignup
10

More than 3 years have passed since last update.

Swift MkMapViewで地図アプリ作成してみた(02)- 現在位置を取得する

Last updated at Posted at 2019-02-17

記事一覧

Swift MkMapViewで地図アプリ作成してみた(記事一覧)

CLLocationManagerで現在位置を取得する

  1. CLLocationManagerのdelegateを登録する

    ViewController.swift:CoreLocationをimportする
        import UIKit
        import MapKit
        import CoreLocation
    
    ViewController.swift:CLLocationManagerDelegateを継承する
        class ViewController:   UIViewController,
                                CLLocationManagerDelegate {
    
    ViewController.swift:CLLocationManagerのメンバ変数を定義する
            @IBOutlet var mapView: MKMapView!
            var locManager: CLLocationManager!
    
    ViewController.swift:delegateを登録する
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
    
                locManager = CLLocationManager()
                locManager.delegate = self
    
  2. 現在位置更新を受信する

    ViewController.swift:現在位置更新を受信する
            func locationManager(_ manager: CLLocationManager, didUpdateLocations locations:[CLLocation]) {
                let lonStr = (locations.last?.coordinate.longitude.description)!
                let latStr = (locations.last?.coordinate.latitude.description)!
    
                print("lon : " + lonStr)
                print("lat : " + latStr)
            }
    

    func locationManager(_ manager: CLLocationManager, ・・・はdelegate設定すると位置が変化する度に上記の関数がCallされるオーバーライドみたいな仕組み。
    の、はずだがこのままではCallされない。
    デバッグ実行してもbreakしない。
    locationManager.png

  3. そのため、位置情報の使用の許可を得る

    Info.plistで"Privacy - Location When In Use Usage Description"を追加し、Valueにデバイスに許可を得る際に表示する任意の文字列を入力する。
    Location When In Use .png

    位置情報の使用の許可を求め、許可されればCLLocationManagerの現在位置更新を開始する。

    ViewController.swift:位置情報の使用の許可を得る
            override func viewDidLoad() {
                super.viewDidLoad()
                // Do any additional setup after loading the view, typically from a nib.
    
                locManager = CLLocationManager()
                locManager.delegate = self
    
                // 位置情報の使用の許可を得る
                locManager.requestWhenInUseAuthorization()
                if CLLocationManager.locationServicesEnabled() {
                    switch CLLocationManager.authorizationStatus() {
                    case .authorizedWhenInUse:
                        // 座標の表示
                        locManager.startUpdatingLocation()
                        break
                    default:
                        break
                    }
                }
    

    locManager.requestWhenInUseAuthorization()により下記のDialogが表示されるため、Allowを押す。
    startUpdatingLocation.png

    すると現在位置が更新される度にlocationManagerがCallされる様になる。
    一度Allowを選択するともうDialogが表示されることはない。
    locationManager2.png

記事一覧

Swift MkMapViewで地図アプリ作成してみた(記事一覧)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10