如何使用 UIActivityViewController 共享 PHAsset?

Posted

技术标签:

【中文标题】如何使用 UIActivityViewController 共享 PHAsset?【英文标题】:How to share PHAsset by using UIActivityViewController? 【发布时间】:2016-04-20 10:32:07 【问题描述】:

我现在正在尝试通过 UIActivityViewController 共享 Phasset(视频或图像)。

AFAIK 我曾经通过将 url 提供给数组并像这样使用来共享位于我的文档目录中的图像或视频

[[UIActivityViewController alloc] initWithActivityItems:m_arryContents applicationActivities:nil];

但我不知道如何共享 phasset。

我想在不下载或导出到我的文件夹的情况下共享 phasset。

有办法吗?

谢谢。

【问题讨论】:

您尝试过我的代码还是对此有疑问? - 如果我说对了,我正在使用的这段代码确实共享多个 PHAsset(或者确切地说是 PHAsset 所代表的图像) 【参考方案1】:

我正在使用以下方法:

NSArray *selectedIndexPaths = [self.collectionView indexPathsForSelectedItems];

NSMutableArray *activityItems = [NSMutableArray array];

// image Loader
PHImageManager *im = [PHImageManager defaultManager];
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.synchronous = YES;
options.version = PHImageRequestOptionsVersionCurrent;
options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
options.resizeMode = PHImageRequestOptionsResizeModeNone;

for (NSIndexPath *index in selectedIndexPaths)

    // load image
    [im requestImageDataForAsset:self.assetsFetchResults[index.item] options:options resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info)
     
         [activityItems addObject:imageData];
     ];


UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
// prevent sharing to gallery again
activityVC.excludedActivityTypes = @[UIActivityTypeSaveToCameraRoll];

首先我尝试对文件使用 NSURL,但这不适用于每个共享扩展(例如,邮件不起作用,但 imessage 确实......) 所以我最终分享了图片的 NSData。

注意: self.assetsFetchResults 是一个在这里使用的 PHFetchResults,就像一个简单的 NSArray,通过访问我喜欢共享的 PHAssets。

注2: 我的 PHFetchResults 中只有本地图像!

【讨论】:

对。对于图像,它会起作用并且是很好的方法,但如果列表中有视频,那么我们需要导出以共享。对吗? 是的,我想是的。将 NSURL 共享给原始文件,没有按预期工作:(【参考方案2】:

目前我找不到任何解决方案。 理光 theta 和 GoPro 画廊也因此不提供多共享。也许 Apple 只允许对其图库进行多重共享。

如果有人找到解决方案,请分享给我。谢谢。

【讨论】:

以上是关于如何使用 UIActivityViewController 共享 PHAsset?的主要内容,如果未能解决你的问题,请参考以下文章

我在作为 UIDocumentInteractionController 和 UIActivityViewController 的一部分的 UIActivityGroupViewController

创建类似于新的 iOS 6 按钮共享的自定义共享视图

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]