Dans mon application iPhone, j'utilise mapkit avec MkmapView et personnalisé Mkannotationview.
Le problème est lorsque des annotations se chevauchent sur la carte (dans mon application, des annotations sont des photos et ces photos peuvent se chevaucher) et lorsque vous appuyez sur le Annotation qui apparaît sur le devant, c'est une autre annotation (à l'arrière) qui reçoit l'événement (semble être aléatoire). P>
Je n'ai trouvé aucun moyen d'envoyer l'événement à l'annotation avant. Je ne peux pas croire que ce bug / problème n'a aucune solution! P>
z Commande de commande et ordre de chevauchement des annotations questions sur Stackoverflow Ne m'aidez pas beaucoup. P>
S'il vous plaît une idée est la bienvenue (même des solutions sales)! p>
Voici une partie de mon code (rien de fantaisie, très courant): P>
CustomNotation.h p>
- (void)addAnnotation:(CustomAnnotation*)annotation { [map addAnnotation:annotation]; } ... - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation { NSString* identifier = getIdentifierFromAnnotation(annotation); CustomAnnotationView* view; if(!(view = (CustomAnnotationView*)[map dequeueReusableAnnotationViewWithIdentifier:identifier])) { view = [[CustomAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier: identifier]; [(CustomAnnotation*)annotation setView:view]; [view release]; } return view; }
4 Réponses :
Enfin, le meilleur moyen que j'ai trouvé et qui évite de perdre des fonctions de la carte, c'est de: p>
Laissez l'écoute tactile sur CustomNotationView (touchées) (sur chaque annotation) p> li>
Lors de la réception de l'événement tactile, transférez l'événement en classe principale p> li>
Les boucles de la classe principale sur les annotations et conservent l'annotation qui a un bon emplacement (événement tactile dans le cadre d'annotation) et qui est devant p> li> ul>
Cela fonctionne assez bien. P>
Bonne idée. J'ai fait l'UIView transparent et j'ai trouvé qu'il manque.
J'aimerais savoir comment vous avez affaire à la 3ème balle. Comment trouvez-vous l'annotation la plus précoce à un certain CGPoint ou CGRRECT?
Suivi de la réponse d'Alexandre, j'ai désactivé tous mes objets personnalisés mkannotationviews avec afin de ne pas répondre au comportement de sélection par défaut MkmapView par défaut et implémenté dans My Mkannotation sur mesure: P> - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
self.enabled = YES;
[(MKMapView*)self.superview selectAnnotation:self.annotation animated:NO];
}
J'ai ajouté l'uitapgesurerecognizer à la vue à l'avant et qui a résolu le problème pour moi. P>
Dans votre cas, l'ajout d'un reconnaissance de geste à CustomNotationView devrait résoudre le problème. P>
Ne fais pas ça. Les blocs de reconnaissance des gestes touchent la livraison de l'événement sur la carte et la carte s'arrête bientôt que la carte arrête de faire des rappels délégués comme régionDidchangeanimated: etc. qui provoque plus de problèmes.