В своем приложении для iphone я использую MapKit с MKMapView и пользовательским MKAnnotationView.
Проблема в том, что аннотации перекрываются на карте (в моем приложении аннотации представляют собой фотографии, и эти фотографии могут перекрываться), и когда вы нажимаете на аннотацию, которая появляется спереди, это другая аннотация (сзади), которая получает событие (кажется быть случайным).
Я не нашел способа отправить событие на фронтальную аннотацию.
Я не могу поверить, что эта ошибка / проблема не имеет никакого решения!
Z-порядок и Порядок перекрывающихся аннотаций вопросы о стековом потоке мне не очень помогли.
Пожалуйста, любая идея приветствуется (даже грязные решения)!
Вот мой код (ничего необычного, очень распространенное):
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
Основной класс
... // Добавлены аннотации, и некоторые из них перекрываются с другими.
- (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;
}