我需要在MKMapView上显示数千个引脚,我需要一个好的委托方法,我可以添加引脚。 didUserUpdateLocation很糟糕,因为它被多次触发。向MKMapView添加数千个引脚的最佳方法是什么。
更新:
我只是使用BOOL检查一次加载引脚,它似乎工作得非常好!
-(void) mapView:(MKMapView *) mv didUpdateUserLocation:(MKUserLocation *)userLocation
{
NSLog(@"didUpdateUserLocation");
if(self.isMapped) return;
for(Facility *facility in self.facilities)
{
CLLocationCoordinate2D facilityCoord = { facility.latitude,facility.longitude };
MapPoint *mp = [[MapPoint alloc] initWithCoordinate:facilityCoord title:facility.facilityName];
[mv addAnnotation:mp];
}
self.isMapped = YES;
}
答案 0 :(得分:8)
我使用mapView:regionDidChangeAnimated:。我通过纬度和经度从核心数据过滤中提取数据,以获取当前区域和周围环境的引脚,以便用户可以滚动一点而不会再次提取数据。
缩小时,您可以决定显示数据的聚类版本,您可以使用K-Means算法在运行时预先计算或计算。
如果你有大量的数据来使用基于结构而不是对象的光数据结构,这可能会有所帮助。
添加和删除引脚时,您可能需要为淡入/淡出设置动画以平滑过渡。在屏幕上弹出内容是一种糟糕的用户体验。
如果所有这些都涉及服务器呼叫,您可以将呼叫封装在NSOperations中,这样当用户在地图中移动太快时您可以取消旧呼叫。