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 和注释隐藏与缩放的主要内容,如果未能解决你的问题,请参考以下文章

相对于缩放级别缩放 MKMapView 注释

如果在添加注释时缩放,MKMapView 会崩溃

在 MkMapView 上隐藏、显示注释

放大特定的 MKMapView 框架

MKMapView 注释取消选择策略

防止 MKMapView 不断地重新缩放和重新居中到用户位置