首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UIActivityViewController和ALAsset

UIActivityViewController和ALAsset
EN

Stack Overflow用户
提问于 2014-07-29 03:19:08
回答 1查看 344关注 0票数 0

我有一个任务是将Assets Library中的视频共享到Vimeo。我以这种方式实现activity控制器:

代码语言:javascript
运行
复制
NSArray *activityItems = @[_videoAsset.defaultRepresentation.url];

UIActivityViewController *activity = [[UIActivityViewController alloc]
                                      initWithActivityItems:activityItems
                                      applicationActivities:nil];
activity.excludedActivityTypes = @[
                                   UIActivityTypeAirDrop,
                                   UIActivityTypeMessage,
                                   UIActivityTypePostToFacebook,
                                   ];

[self presentViewController:activity animated:YES completion:nil];

苹果公司的文档说,我可以分享我的ALAsset或网址作为活动项目,但我只有控制器中的“保存视频”选项。那么我到底做错了什么呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-26 23:10:58

也有这个问题,最终在将ALAsset的数据保存为文件并共享后,成功地进行了共享。

代码如下所示:

代码语言:javascript
运行
复制
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init];

    [assetsLibrary assetForURL:videoUrl resultBlock: ^(ALAsset *asset){
        ALAssetRepresentation *rep = [asset defaultRepresentation];
        Byte *buffer = (Byte*)malloc(rep.size);
        NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:rep.size error:nil];
        NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"VIDEO.MOV"];

        NSError *error;
        [[NSFileManager defaultManager] removeItemAtPath:videoPath error:&error];
        BOOL success = [data writeToFile:videoPath atomically:YES];
        if (success) {
            NSArray *activityItems = [NSArray arrayWithObjects:[NSURL fileURLWithPath:videoPath], nil];

            UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil];
            [self presentViewController:activityViewController animated:YES completion:nil];
        }


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

https://stackoverflow.com/questions/25002683

复制
相关文章

相似问题

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