在MKMapView中显示多个注释标注

时间:2010-03-10 15:10:29

标签: iphone mkmapview mkannotation

是否可以同时打开多个标注?

代码:

- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView {
    for (id<MKAnnotation> currentAnnotation in theMapView.annotations) {
        [theMapView selectAnnotation:currentAnnotation animated:YES];
    }
}

只打开一个标注。

3 个答案:

答案 0 :(得分:9)

请注意,MKMapView(不是MKAnnotationView)上有一种方法可以按照您的预期以编程方式选择注释:

- (void)selectAnnotation:(id < MKAnnotation >)annotation animated:(BOOL)animated

但是,它会同时自动取消选择任何当前注释,因此这不能解决您的问题。

奇怪的是,MKMapView上的某个属性似乎包含一系列当前选定的注释:

@property(nonatomic, copy) NSArray *selectedAnnotations

但是这个方法的文档说:

  

“为此属性分配新数组   选择第一个注释   只有阵列。“

只是觉得这可能很有意思。

答案 1 :(得分:8)

从严格的API角度来看,这似乎不可行。

-(void)setSelected:(BOOL)selected animated:(BOOL)animated上的MKAnnotationView选择器声明:“您不应该直接调用此方法.MKMapView对象调用此方法以响应用户与注释的交互。”所以基本的信息是在用户选择的完全负责下选择annotationView实例,并且由于用户一次只能选择其中一个,你不应该同时选择其中几个

即使文档说不应该直接调用此方法,您是否尝试在setSelected:YES个实例上使用MKAnnotationView调用它以查看它给出的内容?

我会做的清洁方式:(不是自己测试过)

  • 不依赖于MKMapView的选择机制
  • 将MKAnnotationView子类化以实现自定义
  • 以标注是注释视图的一部分的方式进行自定义,以便您可以显示其中的几个。

如果你这样做,你可以同时出现几个标注气泡,并得到一些看起来像的东西:

alt text http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg

答案 2 :(得分:0)

自iOS 11开始,Apple添加了名为MKMarkerAnnotationView的新注释视图。

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?中,当使注释视图出队时,请确保将其强制转换为MKMarkerAnnotationView(例如var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKMarkerAnnotationView),并将视图的属性titleVisibilitysubtitleVisibility设置为{ {1}}。

enter image description here