Невозможно обнаружить прикосновения на MKAnnotationView в iOS 13 - PullRequest
0 голосов
/ 24 сентября 2019

Моему приложению необходимо обнаруживать касания в 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, но все же вызывают сноску.Любая помощь будет принята с благодарностью.

...