Me estoy frustrando bastante con las limitaciones de MKMapKit. Mi problema actual tiene que ver con el ordenamiento z de las vistas de anotación, particularmente en lo que se refiere a los toques. Si acepta el orden z predeterminado, Mapkit le ofrece:
- El orden parece aleatorio. El orden z no está relacionado con el orden en que se agregaron las anotaciones.
- Si una anotación termina encima de otra, al tocar la anotación superior generalmente aparece la llamada para la anotación inferior. Parece que la detección de aciertos ni siquiera respeta el orden de robo. ¿Que pasa con eso?
Intenté resolver el # 1 usando algo similar al siguiente código encontrado en la web (que fue diseñado para dar cierto control sobre el orden z)
- (void) mapView: (MKMapView *) mapView didAddAnnotationViews: (NSArray *) views {
para (MKAnnotationView * annView en vistas) {
TopBottomAnnotation * ann = (TopBottomAnnotation *) [annView annotation];
if ([arriba]] {
[[supervista de annView] bringSubviewToFront: annView];
} else {
[[supervista de annView] sendSubviewToBack: annView];
}
}
}
Ejecutando a través de las vistas de anotación pasadas a mapView: didAddAnnotationViews: y ajustando su orden z parece arreglar # 1. El problema es que ahora las vistas de las llamadas ya no están siempre en la parte superior de las vistas de anotación. El MapKit parece confundirse mucho sobre las capas (las leyendas se deben dibujar en una capa sobre todas las vistas de anotación). Incluso puedo descubrir cómo se confunde, ya que todas las MKAnnotationViews que recibe tienen la misma supervista (una clase privada MKOverlayView). Se podría pensar que cualquier diseño razonable dibujaría las leyendas sobre esta vista de superposición.
¿Alguien ha resuelto el # 1 o el # 2 exitosamente?













