Edited at

Swift MkMapViewで地図アプリ作成してみた(4)- ロングタップした位置の緯度経度を取得する


記事一覧

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


UILongPressGestureRecognizerでロングタップを検出する



  1. storyboardにUILongPressGestureRecognizerを貼り付ける。

    「command + shift + l(エル)」でObjects Libraryを表示する。

    Long Press Gesture Recognizerをstoryboard上のデバイスまでドラックしてドロップする。

    貼り付けた結果以下の様になる。




  2. ViewController.swiftにUILongPressGestureRecognizerの変数を定義する。


    ViewController.swift:UILongPressGestureRecognizerの変数を定義

        class ViewController:   UIViewController,
    
    CLLocationManagerDelegate {

    @IBOutlet var mapView: MKMapView!
    var locManager: CLLocationManager!
    @IBOutlet var longPressGesRec: UILongPressGestureRecognizer!





  3. UILongPressGestureRecognizer変数にUI Objectを紐付ける。

    Long Press Gesture Recognizerで右クリックし、Referencing Outletsの○をView Controllerまでドラックしてドロップする。

    紐付ける変数(longPressGesRec)を選択する。




  4. UILongPressGestureRecognizerのdelegateを登録する

    UIGestureRecognizerDelegateを継承する。


    ViewController.swift:UIGestureRecognizerDelegateを継承する

        class ViewController:   UIViewController,
    
    CLLocationManagerDelegate,
    UIGestureRecognizerDelegate {

    ロングタップした時にCallされる関数を実装する。

    関数名は任意で良いが、引数はUILongPressGestureRecognizerを指定する。


    ViewController.swift:ロングタップを検出する

        // UILongPressGestureRecognizerのdelegate:ロングタップを検出する
    
    @IBAction func mapViewDidLongPress(_ sender: UILongPressGestureRecognizer) {
    // ロングタップ開始
    if sender.state == .began {
    }
    // ロングタップ終了(手を離した)
    else if sender.state == .ended {
    }

    定義した関数に、UI ObjectのSent Actionsを紐付ける。

    ▶︎を押してPCシミュレータを起動して、検出できることを確認する。




タップした位置の緯度経度を取得する



  1. タップした位置(CGPoint)を指定してMkMapView上の緯度経度を取得する


    ViewController.swift:タップした位置(CGPoint)を指定してMkMapView上の緯度経度を取得する

        // UILongPressGestureRecognizerのdelegate:ロングタップを検出する
    
    @IBAction func mapViewDidLongPress(_ sender: UILongPressGestureRecognizer) {
    // ロングタップ開始
    if sender.state == .began {
    }
    // ロングタップ終了(手を離した)
    else if sender.state == .ended {
    // タップした位置(CGPoint)を指定してMkMapView上の緯度経度を取得する
    let tapPoint = sender.location(in: view)
    let center = mapView.convert(tapPoint, toCoordinateFrom: mapView)

    let lonStr = center.longitude.description
    let latStr = center.latitude.description
    print("lon : " + lonStr)
    print("lat : " + latStr)
    }





記事一覧

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