【问题标题】:Create a snapshot of the Mapbox mapview on iOS?在 iOS 上创建 Mapbox 地图视图的快照?
【发布时间】:2015-11-03 17:18:06
【问题描述】:

我正在使用 Mapbox iOS SDK (2.1.2),我想创建地图视图的快照。我可以看到使用 1.x.x 版本的 iOS SDK 可以做到这一点,但我在当前 API 中看不到任何方法。我搜索了 Mapbox Github 存储库,但没有看到任何内容。我还在他们的支持页面上发了一条消息,但我没有收到回复。

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

【问题讨论】:

    标签: ios mapbox mapbox-gl


    【解决方案1】:

    更新答案: Mapbox Maps SDK for iOS 3.7.0+ 包含 MGLMapSnapshotter,它会为您提供没有地图视图的栅格化地图 - 有关基本实现,请参阅 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;
    }
    

    斯威夫特

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

    【讨论】:

    • 非常好的答案!谢谢炸兔!
    【解决方案2】:

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

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

    【讨论】:

    • 这段代码生成了一个带有 Mapbox 注释和信息按钮的图像,都在位置 (0,0) 处呈现,但没有出现任何矢量图形图块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多