我有一个带有多个叠加层的MKMapView。工作一切都很好,它的工作简单,令人难以置信。然而,有一件事我无法开展工作。这个想法很简单:当用户点击覆盖覆盖的区域时,必须出现带有关于该覆盖的一些信息的标注。叠加层都是MKPolygon
s,它遵循MKOverlay协议,因此遵循MKAnnotation协议。
MKOverlay协议符合 MKAnnotation协议。结果是, 所有叠加对象也是 注释对象可以 在您的代码中被视为一个或两个。 如果您选择处理叠加对象 作为两者,你负责 在两个地方管理该对象。如果 你想要显示两个叠加层 它的视图和注释视图 必须同时实施 mapView:viewForOverlay:和 mapView:viewForAnnotation:中的方法 你的申请代表。它也是 意味着你必须添加和删除 来自覆盖和对象的对象 注释地图的数组。
这来自Apple文档。我试过这样的事情:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation {
MKAnnotationView *aView = [[MKAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:nil];
aView.canShowCallout = YES;
}
但这似乎不起作用。我尝试过使用手势识别器,但我不知道除了使用canShowCallOut
属性之外如何显示标注......
答案 0 :(得分:7)
我想你必须添加MKOverlays作为注释
[self.mapView addAnnotations:myOverlays];
然后在(mapView:viewForAnnotation)中返回一个未隐藏的MKAnnotationView,无论是图形(可点击)还是零Alpha视图。接下来,为每个MKOverlayView添加一个UITapGestureRecognizer,确保它与地图的手势一起使用(UIGestureRecognizerDelegate实现用于同时识别)。最后,当您的手势识别器触发时执行此操作
[self.mapView setSelectedAnnotations:[NSArray arrayWithObject:myOverlayView.overlay]];
我不确定这实际上会触发callOut显示。 另外,请确保您的叠加对象返回标题和/或副标题。