在iOS上创建Mapbox mapview的快照?

时间:2015-11-03 17:18:07

标签: ios mapbox mapbox-gl

我正在使用Mapbox iOS SDK(2.1.2),我想创建mapview的快照。我可以看到iOS SDK的1.x.x版本可以实现这一点,但我没有在当前的API中看到任何方法。我搜索了Mapbox Github回购,但我没有看到任何东西。我也在他们的支持页面上留言,但我没有收到回复。

如果API中尚不存在合适的方法,有人可以提出解决方法吗?或者有人可以建议我自己在哪里开始添加功能?

2 个答案:

答案 0 :(得分:7)

更新回答:适用于iOS 3.7.0+的Mapbox Maps SDK包括MGLMapSnapshotter,它可以为您提供没有地图视图的栅格化地图 - 请参阅this example了解基本知识实施

为了后代的缘故,旧答案保留在下面......

MGLMapView中还没有快照方法,but one is planned

与此同时,这些将为您提供地图视图的内容(仅限该地图视图),包括基本地图和地图用户界面:

<强>目标C

- (UIImage *)snapshot:(UIView *)view {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return snapshot;
}

<强>夫特

func snapshot(view: UIView) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, true, 0)
    view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true)
    let snapshot = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return snapshot
}

Map snapshot

答案 1 :(得分:0)

您可以编写自己的实现来捕获mapview的内容,而不是在Mapbox API中查找方法。你可以尝试一下。

-(UIImage*)mapToImage{
    UIGraphicsBeginImageContext(mapView.bounds.size);
    [mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return mapImage;
}