gpt4 book ai didi

iphone - 处理大量 MKMapView 注释

转载 作者:太空狗 更新时间:2023-10-30 03:26:03 24 4
gpt4 key购买 nike

我有一个带有大量注释(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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com