Swift MapViewで長押しした場所のlocationを取得する

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

スポンサードリンク

てっきりMKMapViewDelegateの中に実装メソッドがあると思ってたら違ってた...

UILongPressGestureRecognizerで長押しイベントを検知する必要がある。

let mapView = MKMapView()
 
override func viewDidLoad() {
    super.viewDidLoad()
    //長押し時のイベントを検知
    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(recognizeLongPress(sender:)))
    //MapViewにリスナーを登録
    self.mapView.addGestureRecognizer(longPress)
}

//長押し時の処理
@objc func recognizeLongPress(sender: UILongPressGestureRecognizer) {
    //長押し感知は最初の1回のみ
    if sender.state != UIGestureRecognizer.State.began {
        return
    }
    
    let location = sender.location(in: self.mapView)
    let coordinate = self.mapView.convert(location, toCoordinateFrom: self.mapView)
    print(coordinate.latitude)
    print(coordinate.longitude)
}