[objective-c]Mapoverlay 是可见 ios7 时隐藏地图视图

发布时间: 2017/3/26 17:20:32
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

当我在 iOS7 中有叠在地图视图上的,如何隐藏地图视图?这段代码,用于工作在 iOS6 中,但当我将我的应用程序升级到 iOS7 它停止工作。

NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews];

[[views objectAtIndex:0] setHidden:YES];

任何建议或意见吗?

解决方法 1:

与 incanus 所说的 MKTileOverlay ,它是像这样在视图控制器︰

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSString *tileTemplate = @"http://tile.stamen.com/watercolor/{z}/{x}/{y}.jpg";
    MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:tileTemplate];
    overlay.canReplaceMapContent = YES;
    [self.mapView addOverlay:overlay];

    [self.mapView setCenterCoordinate:CLLocationCoordinate2DMake(37.54827, -121.98857)];
    self.mapView.delegate = self;
}


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

如果你需要如何覆盖源数据的控制权,你需要到子类 MKTileOverlay 和重写loadTileAtPath:result:

-(void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result
{
    NSData *tile = [self someHowGetTileImageIntoNSDataBaseOnPath:path];
    if (tile) {
        result(tile, nil);
    } else {
        result(nil, [NSError errorWithDomain: CUSTOM_ERROR_DOMAIN code: 1 userInfo:nil]);
    }
}

MKOverlayProtocol要求 boundingMapRect: ,为此覆盖覆盖的矩形区域,应返回 MKMapRect。然而,我个人认为,是否我重写它自己,它空洞事先 canReplaceMapContent = YES 设置,苹果可能不喜欢显示空白的灰色地图。所以我只是让 MKTileMapOverlay 它相反的处理。

如果您覆盖不是实际上的瓷砖,然后 MKTileOverlay 真的不适。不过你可能能模仿它但是总是报告内的零数据 loadTileAtPath:result: ,并添加您真正通过另一个覆盖覆盖。另一个选项将只是覆盖了整个地球与黑色多边形覆盖,但然后毫无戒心的用户会可能会在不知不觉中流更多数据比他/她喜欢。

赞助商