Моему приложению необходимо обнаруживать касания в MKMapView, но я не хочу запускать функцию, когда выбран MKAnnotationView.Это работало до iOS 13:
Установите флаг в функции didSelect:
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
annotationSelected = true
}
Затем обнаружите касания в mapView:
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
if self.mapView.selectedAnnotations.count > 0 || self.annotationSelected {return}
let touch = touches.first
if touch?.tapCount == 1 {
let touchLocation: CGPoint? = touch?.location(in: self.mapView)
if let hitView = mapView.hitTest(touchLocation!, with: nil)
{
if hitView is MKAnnotationView {return}
}
let locationCoordinate: CLLocationCoordinate2D = self.mapView.convert(touchLocation!, toCoordinateFrom: self.mapView)
respondToMapTouch(locationCoordinate)
}
}
Проблема заключается весли к карте прикасаться к представлению annotation, но не к нему, аннотация по-прежнему выбирается.В iOS 12 didSelect вызывается перед endTouches, но в iOS 13 endTouches вызывается первым, поэтому он не знает, что была выбрана аннотация.Когда я пытаюсь подтвердить, был ли тронут annotationView с mapView.hitTest (touchLocation !, with: nil), он возвращает MKAnnotionContainerView, а не MKAnnotationView.
Я не могу на всю жизнь понять, какОбнаружьте эти прикосновения, которые находятся рядом с аннотацией, но не на них в iOS 13, но все же вызывают сноску.Любая помощь будет принята с благодарностью.