1

我正在尝试获取 MKMapView 的屏幕截图。

我正在使用以下代码:

UIGraphicsBeginImageContext(myMapView.frame.size);

[myMapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenShot=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return screenShot;

而且我得到了几乎空白的图像,其中包含地图当前位置图标和 Google 徽标。

可能是什么原因造成的?

我应该告诉你,myMapView 实际上是在另一个 viewController 的视图上,但是由于我得到了显示位置和谷歌徽标的蓝点,我认为我拥有的参考是正确的。

谢谢你。

4

2 回答 2

4

iOS 7 引入了一种新方法来生成 MKMapView 的屏幕截图。现在可以使用新的 MKMapSnapshot API,如下所示:

MKMapView *mapView = [..your mapview..]

MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc]init];
options.region = mapView.region;
options.mapType = MKMapTypeStandard;
options.showsBuildings = NO;
options.showsPointsOfInterest = NO;
options.size = CGSizeMake(1000, 500);

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc]initWithOptions:options];
[snapshotter startWithQueue:dispatch_get_main_queue() completionHandler:^(MKMapSnapshot *snapshot, NSError *error) {
    if( error ) {
        NSLog( @"An error occurred: %@", error );
    } else {
       [UIImagePNGRepresentation( snapshot.image ) writeToFile:@"/Users/<yourAccountName>/map.png" atomically:YES];
    }
}];

目前所有的叠加层和注释都不会被渲染。之后您必须自己将它们渲染到生成的快照图像上。提供的 MKMapSnapshot 对象有一个方便的辅助方法来进行坐标和点之间的映射:

CGPoint point = [snapshot pointForCoordinate:locationCoordinate2D];
于 2013-11-17T12:41:44.097 回答
2

正如这里提到的,你可以试试这个

- (UIImage*) renderToImage
{
   UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
   [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext(); 
  return image;
}
于 2012-04-30T14:14:12.407 回答