是否可以同时打开多个标注?
编码:
- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView {
for (id<MKAnnotation> currentAnnotation in theMapView.annotations) {
[theMapView selectAnnotation:currentAnnotation animated:YES];
}
}
仅打开一个标注。
是否可以同时打开多个标注?
编码:
- (void)mapViewDidFinishLoadingMap:(MKMapView *)theMapView {
for (id<MKAnnotation> currentAnnotation in theMapView.annotations) {
[theMapView selectAnnotation:currentAnnotation animated:YES];
}
}
仅打开一个标注。
请注意,MKMapView
(not MKAnnotationView
) 上有一种方法可以以编程方式选择注释,该方法或多或少如您所料:
- (void)selectAnnotation:(id < MKAnnotation >)annotation animated:(BOOL)animated
但是,它会同时自动取消选择任何当前注释,因此这并不能解决您的问题。
奇怪的是,有一个属性MKMapView
似乎包含一组当前选定的注释:
@property(nonatomic, copy) NSArray *selectedAnnotations
但是关于这种方法的文档说:
“为该属性分配一个新数组仅选择数组中的第一个注释。”
只是觉得这可能很有趣。
从严格的 API 角度来看,这似乎是不可能的。
选择-(void)setSelected:(BOOL)selected animated:(BOOL)animated
器上的MKAnnotationView
状态:“您不应该直接调用此方法。MKMapView 对象调用此方法以响应用户与注释的交互。 ”因此基本消息是在用户选择的全部责任下选择 annotationView 实例,并且由于用户一次只能选择其中一个,因此您不应该同时选择其中的几个。
即使文档说不应直接调用此方法,您是否尝试setSelected:YES
在多个MKAnnotationView
实例上调用它以查看它提供了什么?
我会做的干净的方式:(但是没有测试过自己)
如果你这样做,你可以同时出现几个标注气泡,并得到如下所示的内容:
替代文字 http://a1.phobos.apple.com/us/r1000/048/Purple/2b/b2/ec/mzl.ttcsrlee.480x480-75.jpg
自 iOS 11 起,Apple 添加了名为MKMarkerAnnotationView
.
在func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
中,当您将注释视图出列时,请确保将其转换为 MKMarkerAnnotationView(例如var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier) as? MKMarkerAnnotationView
),并将视图的属性设置titleVisibility
为。subtitleVisibility
.visible