Help us understand the problem. What is going on with this article?

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

記事一覧

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

yuta-sasaki
車載ソフトウェア開発者です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした