Swift 如何获取MKMapView上可见的标记数?
我正在使用以下代码:Swift 如何获取MKMapView上可见的标记数?,swift,mapkit,Swift,Mapkit,我正在使用以下代码: let annotationsInVisibleMapRect = self.mapView.annotations(in: mapView.visibleMapRect) let count = annotationsInVisibleMapRect.reduce(0) { (count, object) -> Int in if let cluster = object as? MKClusterAnnotation {
let annotationsInVisibleMapRect = self.mapView.annotations(in: mapView.visibleMapRect)
let count = annotationsInVisibleMapRect.reduce(0) { (count, object) -> Int in
if let cluster = object as? MKClusterAnnotation {
if let view = self.mapView.view(for: cluster), !view.isHidden {
return count + cluster.memberAnnotations.count
}
} else if let annotation = object as? MKCustomAnnotation {
if let view = self.mapView.view(for: annotation), !view.isHidden {
return count + 1
}
}
}
但是这个代码不正确。有时我在地图上看到集群,但这条线
如果let view=self.mapView.view(对于:集群)!视图。isHidden
给出的值等于真值。
结果我数错了
mapView.annotations.filter({ self.mapView.visibleMapRect.contains(MKMapPoint($0.coordinate)) }).count
经过测试,为我工作:)您的过滤器不适合我。我在地图上添加了161个标记。mapView.annotations.count返回了212个计数。mapView.annotations.filter({mapView.visibleMapRect.contains(MKMapPoint($0.coordinate))})。计数返回193计数。但是地图上的实际可见计数是145,2个簇(137)和(7)以及1个标记。@YuraPetrov您可以保存标记并使用self.mapView.visibleMapRect.contains(MKMapPoint(marker.coordinate)),我没有更清晰的解决方案,抱歉:(我尝试使用“contains”方法,但它也不正确。标记可以容纳在集群中,此集群可以有其他协调器,然后标记,例如,集群可以位于左侧,在visible maprect之外,但标记在visible maprect中,用户将看到错误的标记计数。无论如何,感谢您的建议。