2013-09-26 76 views
1

將MKMapView渲染到UIImage的代碼不再適用於iOS 7.它返回一個空白圖像,其底部只有單詞「Legal」,右上角是黑色指南針。地圖本身缺失。以下是我的代碼:MKMapView到UIImage iOS 7

UIGraphicsBeginImageContext(map.bounds.size); 
[map.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

Map是一個指向MKMapView的IBOutlet。有沒有辦法在iOS 7中正確呈現MKMapView?

+0

您是否嘗試使用'drawViewHierarchyInRect:afterScreenUpdates:'而不是'renderInContext:'? –

回答

4

this SO後:

您可以使用MKMapSnapshotter從所得MKMapSnapshot抓取圖像。請參閱關於它的討論WWDC 2013會話視頻,將地圖工具包放在透視圖中。

例如:

MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init]; 
options.region = self.mapView.region; 
options.scale = [UIScreen mainScreen].scale; 
options.size = self.mapView.frame.size; 

MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options]; 
[snapshotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error) { 
    UIImage *image = snapshot.image; 
    NSData *data = UIImagePNGRepresentation(image); 
    [data writeToFile:[self snapshotFilename] atomically:YES]; 
}]; 

說了這麼多,該renderInContext解決方案仍然爲我工作。有關於僅在iOS7的主隊列中執行此操作的註釋,但似乎仍然有效。但MKMapSnapshotter似乎是更適合iOS7的解決方案。

+1

這應該是一個帶有指向其他答案的鏈接的評論,而不僅僅是一個確切的副本。 – Anna

+2

這沒有考慮到MKMapView疊加。我將如何將MKPolyLines和疊加層包含在UIImage中? – smartfuse

+1

我的完成塊永遠不會被調用 – OMGPOP