最大缩放后,Mkmap iOS11群集未拆分,如何设置?

Cor*_*ory 6 cluster-computing mapkit marker mkannotation ios11

首先,我的代码运行良好。我已经设置好并且mapView.register我的注释标记和集群。

当我按预期在群集视图中缩小注释融合时,当我放大时,除了在特定点上,效果相同。当太多的注解彼此距离太近时,群集视图不再分裂为我的两个注解视图。

因此,我寻求一种能够设置此“缩放级别”的方法,即使彼此之间确实距离很近,它也将使我的两个注释出现。

这是我在地图上放大的群集视图: 在此处输入图片说明

在这里,如果我最大程度地缩放:那么,集群视图之一被分成两个,但是没有显示4个注释。
在此处输入图片说明

我还尝试将两个注释的displayPriority设置为高于群集视图,但是结果仍然相同。有任何想法吗 ?

Ric*_*tos 8

您将需要跟踪地图的缩放级别,并在跨越指定的缩放级别时重新加载注释。

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)