Dans mon application iphone, j'utilise MapKit avec MKMapView et personnalisée MKAnnotationView.
Le problème est quand les annotations se chevauchent sur la carte (dans mon application, les annotations sont des photos et ces photos peuvent se chevaucher) et lorsque vous appuyez sur l'annotation qui apparaît à l'avant, il est une autre annotation (au dos) qui reçoit l'événement (semble être aléatoire ).
Je ne trouve pas un moyen d'envoyer l'événement à l'annotation avant. Je ne peux pas croire que ce bug / problème n'a pas de solution!
Commande Z et ordre des annotations qui se chevauchent des questions sur StackOverflow ne m'a pas aidé beaucoup.
S'il vous plaît toute idée est la bienvenue (même des solutions sales)!
Voilà une partie de mon code (rien d'extraordinaire, très fréquent):
CustomAnnotation.h
@interface CustomAnnotation : NSObject <MKAnnotation> {
@private
CustomAnnotationView* view;
}
@property (nonatomic, retain) CustomAnnotationView* view;
@end
CustomAnnotation.m
@implementation CustomAnnotation
@synthetize view;
CustomAnnotationView.h
@interface CustomAnnotationView : MKAnnotationView {
}
@end
CustomAnnotationView.m
@implementation CustomAnnotationView
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
// Do something related to the annotation tapped
}
@end
classe principale ... // Les annotations sont ajoutées et certains d'entre eux chevauche avec les autres.
- (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;
}













