在缩放或平移期间最小化图块叠加调用

时间:2014-09-15 09:10:54

标签: ios maps apple-maps

我有一个地图视图,我在地图指南服务器上覆盖了切片。来自用户的每次缩放或平移操作都会调用MKTileOverlay方法URLForTilePath。 假设用户按3到4级放大/缩小,URLForTilePath中的MKTileOverlay会在每个中间缩放级别调用。由于获取图块的图像成本很高,我想避免调用叠加方法直到用户停止缩放。

我目前的想法是:

  1. 在缩放或平移时从自动渲染切片中停止MapView
  2. 检测到地图/平移已停止
  3. 在<#li>上面的#2之后手动触发叠加过程

    问题:

    • 这种做法是否更好,还是有其他方法可以做到这一点?
    • 删除和添加叠加层的成本是否低于成本 为每个缩放或平移提取瓷砖?
    • 如果我采用上述方法,如何检测地图/平移功能已停止?

    我们可以假设一起考虑一组缩放或平移动作的间隔是2秒。 每次缩放或平移regionWillChangeAnimated / regionDidChangeAnimated都会被调用。我需要一种方法来执行regionDidChangeAnimated的最后一次调用,如果它发生在2秒的空间内。

    示例代码:MapViewController

    - (MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)    overlay
    {
        return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay];;
    }
    - (void)addLayer:(NSString *)layer
    {
        Tile *overlay = [[Tile alloc] init];
        overlay.canReplaceMapContent = NO;
        overlay.layerName = layer;
        [mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];
    }
    

    示例代码:Tile

    @interface Tile : MKTileOverlay
    @property (nonatomic, copy) NSString *layerName;
    @end
    
    @implementation Tile
    @synthesize layerName;
    
    - (NSURL *)URLForTilePath:(MKTileOverlayPath)path
    {    
        return [NSURL URLWithString:@"Url with tile coordinates and layerName"];
    }
    @end
    

    谢谢!

0 个答案:

没有答案