MKMapView 和注释隐藏与缩放
Posted
技术标签:
【中文标题】MKMapView 和注释隐藏与缩放【英文标题】:MKMapView and annotations hiding with zoom 【发布时间】:2012-08-30 13:48:28 【问题描述】:我正在使用 MKMapView... 我正在向地图添加大量注释,这会导致地图移动缓慢。 我想用缩放级别显示/隐藏注释。在每次缩放中,我想隐藏重叠的注释。 有什么解决办法吗?
到目前为止,我想出了重叠注释边界矩形并删除注释,如果有重叠。这个解决方案很慢,因为我需要将所有内容与所有内容进行比较(我知道,我可以使用树等...),其次,将注释删除和添加回地图有点慢。
最好是可以访问注释渲染,如果注释被渲染,检查它是否可以...... 可以吗?
谢谢
【问题讨论】:
你可以从有这么多注解的重用机制(dequeueReusableAnnotationViewWithIdentifier)中获益。您是否使用自定义注释视图(MKAnnotationView 子类)? 是的,我使用自定义注释。 在使用许多注释缩小地图时,我也遇到了地图缓慢的问题。我做了可重复使用的注释,但它并没有改善 iPhone 4 上的地图移动。在 iPhone 5s 上我没有问题,考虑到渲染能力真的很高。 【参考方案1】:您可以使用以下代码
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
NSArray *annotations = [mapView annotations];
//NSLog(@"%@",annotations);
CustomAnnotation *annotation = nil;
for (int i=0; i<[annotations count]; i++)
annotation = (CustomAnnotation*)[annotations objectAtIndex:i];
if (![annotation isKindOfClass:[MKUserLocation class]])
if (mapView.region.span.latitudeDelta <= 0.13f)
[[mapView viewForAnnotation:annotation] setHidden:NO];
else
[[mapView viewForAnnotation:annotation] setHidden:YES];
您可以在 if 条件下调整 delta 以获得更舒适
【讨论】:
【参考方案2】:从 ios 11 开始,您可以使用原生 SDK 来实现这一点,请查看 the documentation(所谓的“MapKit Annotation Clustering”)
【讨论】:
以上是关于MKMapView 和注释隐藏与缩放的主要内容,如果未能解决你的问题,请参考以下文章