Cor*_*ory 6 cluster-computing mapkit marker mkannotation ios11
首先,我的代码运行良好。我已经设置好并且mapView.register我的注释标记和集群。
当我按预期在群集视图中缩小注释融合时,当我放大时,除了在特定点上,效果相同。当太多的注解彼此距离太近时,群集视图不再分裂为我的两个注解视图。
因此,我寻求一种能够设置此“缩放级别”的方法,即使彼此之间确实距离很近,它也将使我的两个注释出现。
在这里,如果我最大程度地缩放:那么,集群视图之一被分成两个,但是没有显示4个注释。
我还尝试将两个注释的displayPriority设置为高于群集视图,但是结果仍然相同。有任何想法吗 ?
您将需要跟踪地图的缩放级别,并在跨越指定的缩放级别时重新加载注释。
private let maxZoomLevel = 9
private var previousZoomLevel: Int?
private var currentZoomLevel: Int? {
willSet {
self.previousZoomLevel = self.currentZoomLevel
}
didSet {
// if we have crossed the max zoom level, request a refresh
// so that all annotations are redrawn with clustering enabled/disabled
guard let currentZoomLevel = self.currentZoomLevel else { return }
guard let previousZoomLevel = self.previousZoomLevel else { return }
var refreshRequired = false
if currentZoomLevel > self.maxZoomLevel && previousZoomLevel <= self.maxZoomLevel {
refreshRequired = true
}
if currentZoomLevel <= self.maxZoomLevel && previousZoomLevel > self.maxZoomLevel {
refreshRequired = true
}
if refreshRequired {
// remove the annotations and re-add them, eg
let annotations = self.mapView.annotations
self.mapView.removeAnnotations(annotations)
self.mapView.addAnnotations(annotations)
}
}
}
private var shouldCluster: Bool {
if let zoomLevel = self.currentZoomLevel, zoomLevel <= maxZoomLevel {
return false
}
return true
}
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
// /sf/answers/2843136761/
let zoomWidth = mapView.visibleMapRect.size.width
let zoomLevel = Int(log2(zoomWidth))
self.currentZoomLevel = zoomLevel
}
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
// for me, annotation reuse doesn't work with clustering
let annotationView = CustomAnnotationView(annotation: annotation)
if self.shouldCluster {
annotationView.clusteringIdentifier = "custom-id"
} else {
annotationView.clusteringIdentifier = nil
}
return annotationView
}
Run Code Online (Sandbox Code Playgroud)