如何在使用自定义切片时删除或隐藏MKMapView中的背景

时间:2013-09-09 16:09:13

标签: objective-c mkmapview mapkit tiles custom-overlay

尝试了很多方法之后,我仍然没有找到一种好的,全面的方法来防止通常的“地图”显示在我正在使用的自定义地图图块后面。最终,我希望我的应用程序有一个仅包含自定义地图的地图页面。

我真的在寻找纯iOS的解决方案,不需要任何第三方软件,但看起来很难。

我已经尝试了3种方法:

数字1,通过它的视图隐藏背景地图:

NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews];
[[views objectAtIndex:0] setHidden:YES];
  • 然而这对于即将推出的某个新操作系统不起作用!整个屏幕都是空白的。 Apple开发者论坛尚未提供解决方案

Number 2,使用另一个空白叠加层(例如MKCircle)来覆盖背景地图。这有效但是当快速滚动或缩小时,有时叠加闪烁,你可以简单地看到背后的背景图,这是不理想的。

3号,这就是我几天来所做的工作就是简单地阻止用户缩小。大多数记录的方法倾向于使用regionDidChangeAnimated或regionWillChangeAnimated,但是这些似乎不会突然停止地图缩小时缩小 - 它们等到捏移动完成后再生效,这意味着可以简单地查看背景地图。

所以现在我很难过,除非我错过了其他两种方法。

所以任何帮助都会非常感激!

2 个答案:

答案 0 :(得分:2)

添加:

-(void)viewDidAppear:(BOOL)animated    
{    
    MKTileOverlay *overlay = [[MKTileOverlay alloc] init];//        initWithURLTemplate:tileTemplate];    
    overlay.canReplaceMapContent = YES;    
    [map addOverlay:overlay];    
    overlay = nil;
}

-(void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result    
{    
    NSData *tile =nil;    
}

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView  rendererForOverlay: (id<MKOverlay>)overlay    
{
    if ([overlay isKindOfClass:[MKTileOverlay class]])
    {
        MKTileOverlayRenderer *renderer = [[MKTileOverlayRenderer alloc]  initWithOverlay:overlay];    
        [renderer setAlpha:0.5];
        return renderer;
    }
}

它将从后台替换地图内容。在我的情况下,我在整个地图上添加了一个叠加层并隐藏了用户的真实地图,效果非常好。

答案 1 :(得分:0)

如果没有像MapBox这样的第三方库,您无法在当前版本中执行此操作。但是,您所说的未来操作系统版本可以让您这样做。