首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MKMapSnapshotter工作,但我不能共享UIImage

MKMapSnapshotter工作,但我不能共享UIImage
EN

Stack Overflow用户
提问于 2014-01-20 17:40:51
回答 1查看 598关注 0票数 0

我对MKMapSnapshotter有个问题。我目前有两个视图,一个带有UIButton,一个显示UIActivityViewController,另一个显示MKMapView,它显示当前用户的位置。UIActivityViewController用于共享用户的坐标和从MKMapView获取的显示当前位置的UIImage

这张照片是用MKMapSnapshotter拍摄的,secondViewController.m中有这段代码。

代码语言:javascript
复制
- (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、添加文本和在firstViewController.m中加载UIImage的代码

代码语言:javascript
复制
- (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];
}

也许是文件目录问题?我不知道,你能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-20 18:08:05

您对-[NSData writeToFile:atomically:]的调用失败,因为您没有提供可写路径。试试这个:

代码语言:javascript
复制
NSURL *documentsURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *imageURL = [documentsURL URLByAppendingPathComponent:@"SOS_Map.png"];
[data writeToURL:imageURL atomically:YES];

然后,加载和共享图像:

代码语言:javascript
复制
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];

另一个可能更简单的解决方案是将捕获的图像保存在内存中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21240651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档