在我的 iphone 应用程序中,我将 MapKit 与 MKMapView 和自定义 MKAnnotationView 一起使用。
问题是当注释在地图上重叠时(在我的应用程序中,注释是照片并且这些照片可能重叠)并且当您点击出现在前面的注释时,它是另一个接收事件的注释(背面)(似乎是随机的)。
我没有找到任何方法将事件发送到前面的注释。我不敢相信这个错误/问题没有任何解决方案!
stackoverflow 上的Z 排序和重叠注释问题的顺序对我没有太大帮助。
欢迎任何想法(甚至是肮脏的解决方案)!
这是我的一些代码(没什么花哨的,很常见):
自定义注释.h
@interface CustomAnnotation : NSObject <MKAnnotation> {
@private
CustomAnnotationView* view;
}
@property (nonatomic, retain) CustomAnnotationView* view;
@end
自定义注释.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
Main class ... // 添加注释,其中一些与其他注释重叠。
- (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;
}