注意:我使用的是iOS11s原生mapview注释聚类。
在注释仍然以最大缩放聚类的情况下,我们可以以什么方式显示标注?
我正在显示一个弹出式类型视图,以显示群集中的注释列表,但调用selectAnnotation
不足以显示“群集”注释的标注。
选择“Something”,但不显示标注。通过某种方式,我的意思是在触摸mapview后调用我的didDeselect view
方法。
答案 0 :(得分:1)
我遇到了同样的问题。在这种情况下,他们似乎没有仔细考虑过。您必须选择MKClusterAnnotation而不是群集的MKAnnotation,但要实现它并不容易。
在iOS11上,MKAnnotationView上有一个名为cluster
的属性,正如文档所述:
If non-nil this is the annotation view this view is clustered into.
因此,在我的MKAnnotationView子类中,我覆盖了setSelected方法,并且对mapView的弱引用必须选择群集一:
//You have weak reference to mapView
weak var mapView: MKMapView?
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
if #available(iOS 11.0, *) {
if selected, let cluster = cluster {
// Deselect the current annotation (Maybe this step is not required, didn't check it)
if let annotation = annotation {
mapView?.deselectAnnotation(annotation, animated: false)
}
// Select the cluster annotation
if let clusterAnnotation = cluster.annotation {
mapView?.selectAnnotation(clusterAnnotation, animated: true)
}
}
}
}
答案 1 :(得分:0)
实际上很简单。如果未将分配的MKMarkerAnnotationView设置为通过.canShowCallout
显示标注,并且视图上没有附件(这很重要),则地图视图不会显示标注。如果不满足这两个条件,则地图可以在图钉本身上显示标题和副标题。所以,这就是您要做的一切:
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
{
if annotation is MyAnnotationConformingClass {
let annotation = annotation as! MKAnnotation
let view = MKAannotationView(annotation: annotation, reuseIdentifier: "pinReUserId")
view.canShowCallout = true
view.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
return view
}
if annotation is MKClusterAnnotation {
let annotation = annotation as! MKClusterAnnotation
let view = MKMarkerAnnotationView(annotation: annotation, reuseIdentifier: "ClusterResuseId")
view.canShowCallout = true
view.rightCalloutAccessoryView = UIButton(type: .detailDisclosure)
return view
}
return nil
}
通过为集群的MKMarkerAnnotationView提供附件并允许显示标注,将显示标注。如果您还记得较早的SDK,如果您未设置标题和字幕,则地图不会显示标注。