MKMapSnapshotter работает, но я не могу поделиться UIImage

У меня проблема с MKMapSnapshotter, В настоящее время у меня есть два взгляда, один с UIButton, который показывает UIActivityViewController и один с MKMapView, который показывает текущее местоположение пользователя. UIActivityViewController используется, чтобы поделиться координатами пользователя и UIImage взято из MKMapView показывая текущее местоположение.

Снимок сделан с использованием MKMapSnapshotter с этим кодом в secondViewController.m:

- (void)mapViewDidFinishRenderingMap:(MKMapView *)mapView fullyRendered:(BOOL)fullyRendered
{
    snapshotOptions = [[MKMapSnapshotOptions alloc] init];
    snapshotOptions.region = self.mapView.region;
    snapshotOptions.scale = [UIScreen mainScreen].scale;
    snapshotOptions.size = self.mapView.frame.size;

    snapShotter = [[MKMapSnapshotter alloc] initWithOptions:snapshotOptions];

    [snapShotter startWithCompletionHandler:^(MKMapSnapshot *snapshot, NSError *error)
    {
        snapshotImage = snapshot.image;
        data = UIImagePNGRepresentation(snapshotImage);
        [data writeToFile:@"SOS_Map.png" atomically:YES];
    }];
}

и сохраняется в файл с именем: SOS_Map.png, как вы видете. Проблема в том, что если я пытаюсь загрузить .png файл не появляется в UIActivityViewController и так в приложении Почта / Сообщения. Я уверен, что картинка определенно была сделана и что код работает [даже потому, что я проверил его с NSLogs], но я все еще не могу загрузить изображение.

Это код, используемый для запуска UIActivityViewController, добавив текст и загрузить UIImage в firstViewController.m

- (IBAction)shareCoordinates:(id)sender
{
    myBundle = [NSBundle mainBundle];
    pathToImage = [myBundle pathForResource:@"SOS_Map" ofType:@"png"];

    itemsToShare = [NSMutableArray new];
    [itemsToShare addObject:[NSString stringWithFormat:@"text]]; //Coordinates
    [itemsToShare addObject:[UIImage imageNamed:@"SOS_Map.png"]]; //Picture

    itemsToShareLoaded = [NSArray arrayWithArray:itemsToShare];

    _activityView = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare
                                                      applicationActivities:nil];

    [self presentViewController:_activityView animated:YES completion:nil];
}

Может быть, это проблема с каталогом файлов? Я не знаю, не могли бы вы помочь мне с этой проблемой?

1 ответ

Решение

Ваш звонок в -[NSData writeToFile:atomically:] сбой, потому что вы не предоставляете доступный для записи путь. Попробуй это:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *imageURL = [documentsURL URLByAppendingPathComponent:@"SOS_Map.png"];
[data writeToURL:imageURL atomically:YES];

Затем, чтобы загрузить и поделиться изображением:

NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *imageURL = [documentsURL URLByAppendingPathComponent:@"SOS_Map.png"];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]];

NSArray *itemsToShare = @[@"text", image];
UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:itemsToShare applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];

Другое, возможно, более простое решение - сохранить захваченное изображение в памяти.

Другие вопросы по тегам