withアプリーチSwiftUIにMapKitを導入して地図を表示するアプリの開発中にユーザーからのタップ/長押し時に地図上にピンを設置する機能を実装したので方法を解説していきます。SwiftUiでMKMapViewを使用するSwiftUIを使用して地図を表示させる場合はMapView構造体を使用して地図を表示させますが、2022年8月26日現在ユーザーからのタップなどのイベントを取得して地図上に反映させる方法が見つかりませんでした。仕方なくUIKitビューをSwiftUIに使用できるようにするUIViewRepresentableプロトコルを使ってMKMapViewをSwiftUIで使用できるようにして実装していきます。注意:SwiftUIとUIKitのMapKitの使い方は少し異なります。今回はタップイベントを実装するためにUIKitの場合の地図表示方法で進んでいきますが地図を表示するだけであればSwiftUIのMapView構造体で簡単に表示できますのでこちらの記事をご覧ください。地図上をタップされた時にその場所にピンを設置する方法を見ていきます。UIKitのMkMapViewをSwiftUIでも表示できるようにUIViewRepresentableプロトコルを使用したビュー構造体を定義します。}}ここでは特に変わった処理はありません。プロパティにはMKMapViewインスタンスを用意しておきます。UIで管理するためのCoordinatorクラスを追加します。プロパティにはビュー構造体のMKMapViewをバインディングできるようにしておきます。タップされた時に実行したい処理はtappedメソッドとして記述していきます。mapView.addAnnotation(tapAnotation)}引数にはUITapGestureRecognizerクラスを指定しておきます。これでタップされた際の情報を引数名gestureで取得できるようになります。CGPointタップされた地図上の座標を取得するにはUIGestureRecognizerクラスのlocation(in:)メソッドを使います。引数に指定したビュー内の場所を返してくれるのでMKMapViewを指定するとMapビューのポイントを返してくれます。mapView)公式リファレンス:UIGestureRecognizer。CLLocationCoordinate2Dビューのポイントから地図座標に変換するにはMKMapViewのconvertメソッドを使用します。引数には変換するCGPoint型の値とビューインスタンスを指定します。toCoordinateFrom:mapView)MKPointAnnotationクラスアノテーションはMKPointAnnotationクラスを使って構築していきます。"ポイント"MKMapView.removeAnnotationメソッドタップされる度にアノテーションを増やしたくないので追加前にアノテーションをリセットします。アノテーションの有無を識別し、あれば1つしかないはずなので決め打ちで[0]をremoveAnnotationで削除します。mapView.removeAnnotation(mapView.annotations[0])}最後にアノテーションをビューに追加して終了です。mapView.addAnnotation(basePin1)makeCoordinatorの追加Coordinatorクラスを増やしたのでUIMapAddressGetView構造体にはmakeCoordinatorメソッドを追加しておきます。続いてタップされた時のイベント処理をビューに追加するためにmakeUIViewメソッドの中からUITapGestureRecognizerを使用してイベント処理を定義し、addGestureRecognizerを使ってmapViewのイベントに追加しておきます。mapView}これでタップした位置にアノテーションを設置する機能が完了しました。全体のコードは以下の通りです。}}長押しされた場所にピンを設置する方法タップの場合だと通常の地図操作の際にもピンが設置されてしまう可能性があるので長押しした場合のみピンを設置するように実装してみます。長押しの場合は先程のコードのUITapGestureRecognizer部分をUILongPressGestureRecognizerに変えるだけです。今回はメソッド名も変更しておきました。}}長押しされた場所の住所を取得するユーザーが長押しした場所の住所を取得できるようにしていきます。構造体とCoordinatorクラスにaddressプロパティを追加し、長押しされたポイントの住所が格納されるようにしていきます。}}おすすめ記事:【SwiftUI】ジオコーディングの実装方法!MapKitで逆ジオコーディングまだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。ご覧いただきありがとうございました。友達や家族の誕生日を登録しておくと当日に通知が届きお知らせしてくれるiOSアプリです。貸し借り管理アプリお金の貸し借りを管理するためのアプリです。貸借の色が分かれているので識別しやすく、使いやすさを求めてできるだけシンプルなUIにしています。カシホン人に貸すことが多く、誰に貸したか忘れがちな本の貸し借りを記録できるアプリです。