点击叠加时显示标注

时间:2011-06-08 05:57:30

标签: iphone objective-c

我有一个带有多个叠加层的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属性之外如何显示标注......

1 个答案:

答案 0 :(得分:7)

我想你必须添加MKOverlays作为注释

 [self.mapView addAnnotations:myOverlays];

然后在(mapView:viewForAnnotation)中返回一个未隐藏的MKAnnotationView,无论是图形(可点击)还是零Alpha视图。接下来,为每个MKOverlayView添加一个UITapGestureRecognizer,确保它与地图的手势一起使用(UIGestureRecognizerDelegate实现用于同时识别)。最后,当您的手势识别器触发时执行此操作

[self.mapView setSelectedAnnotations:[NSArray arrayWithObject:myOverlayView.overlay]];

我不确定这实际上会触发callOut显示。 另外,请确保您的叠加对象返回标题和/或副标题。