位置情報
CLLocationManager
Swift
Mkmapview
地図アプリ

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


記事一覧

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で地図アプリ作成してみた(記事一覧)