在后台加载MKMapView,并从它创建UIImage(iPhone和iPad)
我有一种情况,我需要一种加载MKMapView的方式与几个覆盖。此地图视图不应显示在屏幕上,我需要它加载的唯一原因是为了从地图创建图像以供其他地方使用。在后台加载MKMapView,并从它创建UIImage(iPhone和iPad)
我已经在网上看了一下,但我没有找到解决问题的运气。请有人帮助我吗?
这是我到目前为止已经试过(没有成功)
// Load the map view
Logs_Map_ViewController *mapViewController = [[Map_ViewController alloc] initWithNibName:@"Map_ViewController" bundle:nil];
mapViewController.GPSCoordinatesToPlot = [someDictionary objectForKey:kGPSCoords];
// Take a picture of the map
UIImage *mapImage = [mapViewController convertMapToImage];
NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation(mapImage)];
NSString *base64String = [imageData base64EncodedString];
注:这是非常重要的应用程序等待地图完全负载(从而正确创建图像)。
您应该能够在MKMapViewDelegate
协议中实施mapViewDidFinishLoadingMap
并将您的图像存储在那里,我想。这应该解决需要等待地图加载以存储图像的问题。
如果您也看到其他问题,请提供更多关于这些问题的详细信息,因为您的问题并不清楚您询问的具体问题。
这可能会也可能不会有帮助,但这是我在我的情况下做的。
我有一个场景/业务与7个表格单元格的桌面视图。其中一个表格单元格包含一个带有pindrop的地图。当用户第一次查看企业时,我运行一个快速条件查看mapview是否已被缓存(或者更确切地说,保存为图像)。如果图像不存在,我将一个新的mapview加载到单元格中并添加一个单一的pindrop注释。在mapview已经加载并且注解已经被删除之后,我将视图图层保存为图像,然后从单元中删除mapview(并释放它,因为我们需要保持代表活着),并用新的新图像替换。我建议spawing一个后台线程来保存图像/插入单元格。这种方式表格视图不会窒息。
然后最后,当用户下一次返回到同一地点/业务时,mapview图像存在,我加载图像。
我知道这对地图完全加载非常重要,否则在未加载地图的情况下,图像会以灰色保存。如果您放弃了放针,则需要确保在地图加载完成后(mapViewDidFinishLoadingMap :)并且您的注记已经放下(mapView:didAddAnnotationViews :)),图像保存方法才会触发。只有在两者都完成后,您才能开始保存图像。我建议使用延迟选择器。我延迟了1秒。
这个相同的概念肯定可以应用于其他情况。底线是,因为strings42状态,你将不得不添加一个可见的地图视图到你的视图来捕捉图像。
延期是失踪的一块。即使在didFinishLoadingMap方法被调用之后,我仍然看到一个灰色的图像,直到我添加了延迟。谢谢! – jmstone617
也为我工作。我不喜欢它。但它的工作。 – roocell
的方法,下面将始终被称为MapView类的代表,
mapViewDidFinishRenderingMap:fullyRendered:
所以,你可以从MapView的地图图像这里
- (UIImage *)renderToImage:(MKMapView *)mapView
{
UIGraphicsBeginImageContext(mapView.bounds.size);
[mapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
我曾尝试实施这一委托的方法,但它从来没有显示过包含mapview的视图。 –
啊,是的。你是对的,你几乎肯定不能在不显示mapView的情况下得到实际的地图图像,因为这是触发它获取数据的原因。另外,我只是提出这个问题,因为*社区几乎肯定会让你回应,如果我不这样做,那可能是违反了Google的服务条款,将MKMapView数据用于除了实际显示以外的任何内容一张地图。 IANAL,我没有联系到Google,只是提到它。无论如何,MKMapView并不能真正用作不可见的数据源。 – strings42
啊,我明白了,谢谢。我没有意识到这是一个问题 - 我假定拍摄地图并发送电子邮件是可以的。感谢您的澄清。 –