LoginSignup
9
9

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-02-17

記事一覧

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

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

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

    「command + shift + l(エル)」でObjects Libraryを表示する。
    Long Press Gesture Recognizerをstoryboard上のデバイスまでドラックしてドロップする。
    longPress1.png

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

  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までドラックしてドロップする。
    longPressGesRec1.png

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

  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を紐付ける。

    Action.png

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

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

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

9
9
0

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