Я отображаю набор комментариев на MKMapView
, используя пользовательский MKMarkerAnnotationView
с displayPriority = .required
, чтобы не было кластеризации или скрытия, и UIButton
в качестве rightCalloutAccessoryView
.
Когда я нажимаю аннотацию на карте, выноска отображается должным образом, но когда я касаюсь выноски или ее аксессуара, если касание перекрывается другим маркером на карте, касание не регистрируется.
Ниже приведен пример проблемы для игровой площадки.Обратите внимание, что выноска не реагирует на нажатия, когда она перекрывается другой аннотацией на карте.
import MapKit
import PlaygroundSupport
class MapViewController: UIViewController, MKMapViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
}
func mapView(_ mapView: MKMapView, annotationView view: MKAnnotationView,
calloutAccessoryControlTapped control: UIControl) {
print("Callout tapped!")
}
}
class CustomAnnotationView: MKMarkerAnnotationView {
override var annotation: MKAnnotation? {
willSet {
canShowCallout = true
rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
titleVisibility = .hidden
subtitleVisibility = .hidden
displayPriority = .required
}
}
}
let mapView = MKMapView(frame: CGRect(x:0, y:0, width:800, height:800))
let controller = MapViewController()
mapView.delegate = controller
mapView.register(CustomAnnotationView.self, forAnnotationViewWithReuseIdentifier: MKMapViewDefaultAnnotationViewReuseIdentifier)
let coordinate1 = CLLocationCoordinate2DMake(37.334922, -122.009033)
let annotation1 = MKPointAnnotation()
annotation1.coordinate = coordinate1
annotation1.title = "Annotation 1"
annotation1.subtitle = "Subtitle 1"
let coordinate2 = CLLocationCoordinate2DMake(37.335821492347556, -122.0071341097355)
let annotation2 = MKPointAnnotation()
annotation2.coordinate = coordinate2
annotation2.title = "Annotation 2"
annotation2.subtitle = "Subtitle 2"
mapView.addAnnotation(annotation1)
mapView.addAnnotation(annotation2)
var mapRegion = MKCoordinateRegion()
let mapRegionSpan = 0.02
mapRegion.center = coordinate1
mapRegion.span.latitudeDelta = mapRegionSpan
mapRegion.span.longitudeDelta = mapRegionSpan
mapView.setRegion(mapRegion, animated: true)
let mapViewController = MapViewController()
PlaygroundPage.current.liveView = mapView
И изображение, иллюстрирующее проблему.
Любая помощь по этому вопросу будет принята с благодарностью.Спасибо!