确定用户是否已经看过地图的这一部分

时间:2014-02-02 13:46:47

标签: ios objective-c mkmapview

我正在开发一个应用程序,并且在注释性能方面遇到了障碍。

目前,我有这段代码:

-(void) getStationsWithRadius:(float)distance //distanceInMetres
{
    distance = (distance/1000.0f);
    CLLocation *loc = [[CLLocation alloc] initWithLatitude:[mkMapView centerCoordinate].latitude longitude:[mkMapView centerCoordinate].longitude];
    ///....Network stuff....
}

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

    MKMapRect mRect = mapView.visibleMapRect;
    MKMapPoint eastMapPoint = MKMapPointMake(MKMapRectGetMinX(mRect), MKMapRectGetMidY(mRect));
    MKMapPoint westMapPoint = MKMapPointMake(MKMapRectGetMaxX(mRect), MKMapRectGetMidY(mRect));

    zoomDistance = MKMetersBetweenMapPoints(eastMapPoint, westMapPoint); //In Meters
    [self getAnnotationsWithRadius:zoomDistance];
//etc.....

简而言之,每次用户更改地图上的区域时,我都希望应用程序根据MKMapView坐标的中心和缩放距离(半径)查询服务器以获取注释)。

这显然对服务器很不利,因为即使地图移动中最轻微的变化也会导致应用程序请求注释。

有没有办法确定用户是否已经加载了他们当前所在地图视图的注释?

1 个答案:

答案 0 :(得分:0)

通过绑定rect而不是中心和半径来请求注释。存储您收到的所有注释,并按x和y点索引。将您请求注释的矩形存储在智能结构中,该结构将合并形成较大矩形的矩形。

每当用户移动地图时,您只需检查您的结构以查看是否已请求当前区域内的所有内容,如果是这样,只需查找x范围和y范围内的所有注释,并将它们逻辑地和它们放在一起。

如果没有,请在您缺失的矩形部分中获取注释,并标记您现在已经获取该矩形。