【发布时间】:2015-11-03 17:18:06
【问题描述】:
我正在使用 Mapbox iOS SDK (2.1.2),我想创建地图视图的快照。我可以看到使用 1.x.x 版本的 iOS SDK 可以做到这一点,但我在当前 API 中看不到任何方法。我搜索了 Mapbox Github 存储库,但没有看到任何内容。我还在他们的支持页面上发了一条消息,但我没有收到回复。
如果 API 中尚不存在合适的方法,有人可以提出解决方法吗?或者有人可以建议我自己从哪里开始添加功能?
【问题讨论】:
我正在使用 Mapbox iOS SDK (2.1.2),我想创建地图视图的快照。我可以看到使用 1.x.x 版本的 iOS SDK 可以做到这一点,但我在当前 API 中看不到任何方法。我搜索了 Mapbox Github 存储库,但没有看到任何内容。我还在他们的支持页面上发了一条消息,但我没有收到回复。
如果 API 中尚不存在合适的方法,有人可以提出解决方法吗?或者有人可以建议我自己从哪里开始添加功能?
【问题讨论】:
更新答案: 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
}
【讨论】:
您可以编写自己的实现来捕获地图视图的内容,而不是在 Mapbox API 中寻找方法。你可以试试这个。
-(UIImage*)mapToImage{
UIGraphicsBeginImageContext(mapView.bounds.size);
[mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *mapImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return mapImage;
}
【讨论】: