在 iOS 上创建 Mapbox 地图视图的快照?

Create a snapshot of the Mapbox mapview on iOS?

我正在使用 Mapbox iOS SDK (2.1.2),我想创建地图视图的快照。我可以使用 iOS SDK 的 1.x.x 版本查看在哪里可以使用此功能,但我在当前 API 中看不到任何方法。我搜索了 Mapbox Github 存储库,但我没有在那里看到任何东西。我还在他们的支持页面上留言,但没有收到回复。

如果 API 中还没有合适的方法,有人可以建议解决方法吗?或者有人可以建议我从哪里开始自己添加功能?

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

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

更新的答案: iOS 3.7.0+ 的 Mapbox Maps SDK 包括 MGLMapSnapshotter, which will get you a rasterized map without a map view — see this example 的基本实现。

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


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

与此同时,这些将为您提供地图视图(且仅该地图视图)的内容,包括底图和地图 UI:

Objective-C:

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

    return snapshot;
}

Swift:

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

    return snapshot
}