【问题标题】:MKMapView and annotations hiding with zoomMKMapView 和注释隐藏与缩放
【发布时间】:2012-08-30 13:48:28
【问题描述】:

我正在使用 MKMapView... 我正在向地图添加大量注释,这会导致地图移动缓慢。 我想用缩放级别显示/隐藏注释。在每次缩放中,我想隐藏重叠的注释。 有什么解决办法吗?

到目前为止,我想出了重叠注释边界矩形并删除注释,如果有重叠。这个解决方案很慢,因为我需要将所有内容与所有内容进行比较(我知道,我可以使用树等...),其次,将注释删除和添加回地图有点慢。

最好是可以访问注释渲染,如果注释被渲染,检查它是否可以...... 可以吗?

谢谢

【问题讨论】:

  • 你可以从有这么多注解的重用机制(dequeueReusableAnnotationViewWithIdentifier)中获益。您是否使用自定义注释视图(MKAnnotationView 子类)?
  • 是的,我使用自定义注释。
  • 在使用许多注释缩小地图时,我也遇到了地图缓慢的问题。我做了可重复使用的注释,但它并没有改善 iPhone 4 上的地图移动。在 iPhone 5s 上我没有问题,考虑到渲染能力真的很高。

标签: objective-c mkmapview mkannotation


【解决方案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”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-22
      • 2010-12-08
      • 2011-06-08
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多