2013-09-26 3 views
1

Код для визуализации MKMapView для UIImage больше не работает в iOS 7. Он возвращает пустое изображение с ничем, кроме слова «Legal» внизу и черным компасом в правом верхнем углу. Сама карта отсутствует. Ниже приводится мой код:MKMapView to UIImage iOS 7

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

Карта - это IBOutlet, который указывает на MKMapView. Есть ли способ правильно отобразить MKMapView в iOS 7?

+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

Смежные вопросы