Рендеринг MKMapView в UIImage с реальным разрешением - PullRequest
8 голосов
/ 18 ноября 2010

Я использую эту функцию для рендеринга экземпляра MKMapView в изображение:

@implementation UIView (Ext)
- (UIImage*) renderToImage
{
  UIGraphicsBeginImageContext(self.frame.size);
  [self.layer renderInContext:UIGraphicsGetCurrentContext()];
  UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext(); 
  return image;
}

Это отлично работает. Но с iphone4 изображение не имеет такого же разрешения, как на самом деле на устройстве. На устройстве у меня качество карты 640х920, а отрендеренное изображение имеет разрешение 320х460. Затем я удвоил размер, предоставленный функции UIGraphicsBeginImageContext (), но заполнил только верхнюю левую часть изображения.

Вопрос: Можно ли как-нибудь отобразить карту на изображении с полным разрешением 640x920?

Ответы [ 2 ]

8 голосов
/ 19 ноября 2010

Попробуйте использовать UIGraphicsBeginImageContextWithOptions вместо UIGraphicsBeginImageContext:

UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0);

Подробнее см. QA1703 . Там написано:

Примечание. Начиная с iOS 4, UIGraphicsBeginImageContextWithOptions позволяет обеспечить с масштабом фактор. Масштабный коэффициент нуля устанавливает его к масштабному коэффициенту устройства главный экран. Это позволяет вам получить самый резкий, с самым высоким разрешением снимок экрана, включая Retina Display.

0 голосов
/ 17 ноября 2013

iOS 7 представила новый метод для создания скриншотов MKMapView.Теперь можно использовать новый API MKMapSnapshot следующим образом:

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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...