実現したいこと
・地図上のピンに付随した吹き出しにボタン機能を実装
・吹き出しをタッチするとデバッグエリアにテキスト表示
前提
現在swiftUIを使用して,地図上のピンをタッチすると吹き出しが表示され,
その吹き出しにボタン機能を実装しようとしています.
現在ピンの設置,吹き出しの表示までできていますが,
そこにボタン機能を追加できないでいます.
ボタンが機能しているかの確認として,print文を挿入していますが,
デバッグエリアに「ピンが押されました」というテキストが表示されません.
以下に現在のコードを載せています.ご教授いただけるとありがたいです.
該当のソースコード
swift
1import SwiftUI2import MapKit3 4struct PracticeView: View {5 var body: some View {6 MapView3(latitude: 37.334922, longitude: -122.009033, title: "aaaa", subtitle: "bbbbbbbbb")7 .ignoresSafeArea()8 }9}10 11struct MapView3: UIViewRepresentable {12 let latitude: Double13 let longitude: Double14 let title: String15 let subtitle: String16 17 func makeUIView(context: Context) -> MKMapView {18 let mapView = MKMapView(frame: .zero)19 mapView.delegate = context.coordinator 20 21 let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)22 let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 2, longitudeDelta: 2))23 mapView.setRegion(region, animated: true)24 25 let annotation = MKPointAnnotation()26 annotation.coordinate = location 27 annotation.title = title 28 annotation.subtitle = subtitle 29 mapView.addAnnotation(annotation)30 mapView.mapType = .satelliteFlyover 31 32 33 return mapView 34 }35 36 func updateUIView(_ view: MKMapView, context: Context) {37 let location = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)38 let region = MKCoordinateRegion(center: location, span: MKCoordinateSpan(latitudeDelta: 2, longitudeDelta: 2))39 view.setRegion(region, animated: true)40 }41 42 func makeCoordinator() -> Coordinator {43 Coordinator()44 }45 46 class Coordinator: NSObject, MKMapViewDelegate {47 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {48 if annotation is MKUserLocation {49 return nil50 }51 let reuseIdentifier = "pin"52 var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseIdentifier)53 if annotationView == nil {54 annotationView = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: reuseIdentifier)55 annotationView?.canShowCallout = true56 let button = UIButton(type: .infoLight)57 annotationView?.rightCalloutAccessoryView = button 58 } else {59 annotationView?.annotation = annotation 60 }61 return annotationView 62 }63 64 func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView, calloutAccessoryControlTapped control: UIControl) {65 if control == view.rightCalloutAccessoryView {66 print("ピンが押されました")67 }68 }69 }70}71 72struct PracticeView_Previews: PreviewProvider {73 static var previews: some View {74 PracticeView()75 }76}
0 コメント