iphone - 处理大量 MKMapView 注释

标签 iphone objective-c mkmapview

我有一个带有大量注释(3000+)的 map View ,当用户缩放到合理的水平时,一切都很好而且很快。

尽管当用户缩小并看到大量注释时,由于同时显示大量注释,速度会大大降低。处理此问题的最佳方法是什么?

我目前使用的解决方案:

- (void)mapView:(MKMapView *)_mapView regionDidChangeAnimated:(BOOL)animated {

    NSArray *annotations = [_mapView annotations];  
    MapAnnotation *annotation = nil; 

    for (int i=0; i<[annotations count]; i++)
    {
        annotation = (MapAnnotation*)[annotations objectAtIndex:i];
        if (_mapView.region.span.latitudeDelta > .010)
        {
            [[_mapView viewForAnnotation:annotation] setHidden:YES];
            warningLabel.hidden = NO;
        }
        else {
            [[_mapView viewForAnnotation:annotation] setHidden:NO];
            warningLabel.hidden = YES;
        }
    }
}

效果很好,但由于循环的绝对大小,这会导致放大和缩小以及四处滚动时速度变慢。我似乎想不出更好的方法来处理这个问题,有没有一种方法可以只循环显示当前正在显示的注释或沿着这些行的某些内容以减少循环的大小?

最佳答案

据我了解您的代码,如果 mapView 缩小超过某个指定值,您将隐藏所有注释的 View 。

在我看来,像下面这样的东西会更好:

- (void)mapView: (MKMapView*)_mapView regionDidChangeAnimated: (BOOL)animated
{
    if (_mapView.region.span.latitudeDelta > .010 && self.mapViewsHidden == NO) {
        for (MapAnnotation* annotation in _mapView.annotations) {
            [[_mapView viewForAnnotation: annotation] setHidden: YES];
        }
        [self.warningLabel setHidden: NO];
        [self setMapViewsHidden: YES];
    }
    else if (_mapView.region.span.latitudeDelta <= .010 && self.mapViewsHidden == YES) {
        for (MapAnnotation* annotation in _mapView.annotations) {
            [[_mapView viewForAnnotation: annotation] setHidden: NO];
        }
        [self.warningLabel setHidden: YES];
        [self setMapViewsHidden: NO];
    }
}

有了上面的内容,在大多数情况下,这段代码唯一要做的就是几个 if 检查。

另一种解决方案是删除不应在 map 上显示的注释。就我个人而言,我认为这会更好,这样代码就不必为 map 上尚未显示的注释创建 View 。

关于iphone - 处理大量 MKMapView 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4776341/

相关文章:

iphone - 检测 modalView 来自某个 UIViewController

ios - Xcode 8 如何在 Objective-C 中使用核心数据代码生成类?

objective-c - Objective C 结构和内存管理

ios - MKMapView必须在主线程上初始化

iphone - MKMapView错误

iphone - 如何明确地为 CALayer 的背景颜色设置动画?

iphone - 将 UIImage 从一个类传递到另一个类

ios - iOS7 中的 MFMailComposeViewController 自定义

ios - Data Source 和 UITableViewController 分离有什么好处?

ios - 如何在 iOS 应用程序中使用 kml 文件在 map View 上显示数据库中的数据