【问题标题】:UIActivityViewController and ALAssetUIActivityViewController 和 ALAsset
【发布时间】:2017-02-26 23:10:57
【问题描述】:

我的任务是将视频从资产库共享到 Vimeo。我正在以这种方式实现活动控制器:

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];

Apple 文档说我可以将我的 ALAsset 或 URL 共享为活动项目,但我在控制器中只有“保存视频”选项。那我做错了什么?

【问题讨论】:

  • 您是否在“设置”应用中设置了 Vimeo 帐户?
  • 没有。但我应该这样做吗?即使我没有设置我的帐户,Facebook 和 Twitter 也会受到控制。
  • 试试看会发生什么。
  • 哦,我真的只需要设置帐户。谢谢!

标签: ios objective-c uiactivityviewcontroller


【解决方案1】:

也遇到了这个问题,最终把ALAsset的数据保存为文件分享出来后成功分享了。

代码如下所示:

    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];

【讨论】:

    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多