点击叠加时显示标注

Sco*_*ets 4 iphone objective-c

我有一个带有几个叠加层的MKMapView.工作一切都很好,它的工作简单,令人难以置信.然而,有一件事我无法开展工作.这个想法很简单:当用户点击覆盖覆盖的区域时,必须出现带有关于该覆盖的一些信息的标注.叠加层都是MKPolygons,它遵循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;
}
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.我尝试过使用手势识别器,但我不知道除了使用canShowCallOut属性之外如何显示标注...

tsa*_*yan 7

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

 [self.mapView addAnnotations:myOverlays];
Run Code Online (Sandbox Code Playgroud)

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

[self.mapView setSelectedAnnotations:[NSArray arrayWithObject:myOverlayView.overlay]];
Run Code Online (Sandbox Code Playgroud)

我不确定这实际上会触发callOut显示.还要确保您的叠加对象的返回标题和/或副标题.