我正在尝试获取MKMapView的屏幕截图。
我正在使用以下代码:
UIGraphicsBeginImageContext(myMapView.frame.size);
[myMapView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *screenShot=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return screenShot;
我正在使用地图当前位置图标和Google徽标来获取几乎空白的图片。
可能导致什么?
我应该告诉你myMapView实际上是在另一个viewController的视图上,但是因为我得到了显示位置和google徽标的蓝点,我认为我的参考是正确的。
谢谢。
答案 0 :(得分: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];
答案 1 :(得分:2)
如上所述[{3}},您可以尝试这个
- (UIImage*) renderToImage
{
UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}