2015-01-29 3 views
5

아래 코드를 사용하여 기기에있는 동영상을 공유합니다. 메시지, Facebook 및 iCloud를 통해 공유 할 수 있으며 메일 옵션은 볼 수 있습니다. 거기에 있지만 메일 초안에 비디오가 첨부되지 않습니다.UIActivityViewController를 사용하여 동영상을 공유 할 때 동영상이 메일로 첨부되지 않았습니다.

코드에서 videoAsset은 인 PHAsset입니다. 내가 UIImagePickerController를 사용하여 비디오, 그것이 내가 검색, 작동하지만 답을 찾을 수 없습니다를 연결하는 경우

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) { 
    AVURLAsset* urlAsset = (AVURLAsset*)asset; 
    fileUrl = urlAsset.URL; 
    NSLog(@"fileUrl is %@",fileUrl); 

    NSArray *activityItems = [NSArray arrayWithObjects:fileUrl, nil]; 

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

, 도와주세요.

+0

http://stackoverflow.com/a/20211603/2074320 –

+0

@mitulmarsonia? – gabbler

+0

UIActivityViewController에 표시된 옵션을 완전히 공유 할 수있는 아이템의 종류에 따라 다릅니다 것을. 예를 들어 동영상이있는 경우 Facebook 또는 twitter 옵션이 표시되지 않습니다. 그러나 이미지와 제목이라면 관련 옵션이 분명히 표시됩니다. 다음은 메일, 트위터, 페이스 북, assignToContact, 카메라 롤 저장, 인쇄, 복사 등의 앱을 표시합니다. –

답변

12

동영상 파일을 문서 디렉토리에 저장하고 문서 디렉토리의 url 파일을 사용하여 동영상을 첨부하여 메일로 공유합니다.

[[PHImageManager defaultManager] requestImageDataForAsset:videoAsset options:nil resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) { 
    NSLog(@"info is %@", info); 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString* videoPath = [documentsDirectory stringByAppendingPathComponent:@"IMG_2185.MOV"]; 

    NSError *error; 
    [[NSFileManager defaultManager] removeItemAtPath:videoPath error:&error]; 
    BOOL success = [imageData 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]; 
    } 
}]; 

나는 또한 requestExportSessionForVideo 메서드를 사용하여 비디오를 문서 디렉토리로 내보내도 작동했습니다.

[[PHImageManager defaultManager] requestExportSessionForVideo:videoAsset options:nil exportPreset:AVAssetExportPresetPassthrough resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) { 

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

    NSError *error; 
    if ([manager fileExistsAtPath:videoPath]) { 
     BOOL success = [manager removeItemAtPath:videoPath error:&error]; 
     if (success) { 
      NSLog(@"I successfully removed it!"); 
     } 
    } 

    NSURL *outputURL = [NSURL fileURLWithPath:videoPath]; 
    NSLog(@"this is the final path %@",outputURL); 
    exportSession.outputFileType=AVFileTypeQuickTimeMovie; 
    exportSession.outputURL=outputURL; 

    [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
     if (exportSession.status == AVAssetExportSessionStatusFailed) { 
      NSLog(@"failed"); 
     } else if(exportSession.status == AVAssetExportSessionStatusCompleted){ 
      NSLog(@"completed!"); 
       dispatch_async(dispatch_get_main_queue(), ^(void) { 
        NSArray *activityItems = [NSArray arrayWithObjects:outputURL, nil]; 

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

       }); 


     } 
    }]; 
}]; 
+0

'requestExportSessionForVideo'를 어떻게 사용했는지 미리보기가 있습니까? 나는 그것을 사용하려고하지만 outputURL은 항상 nil로 온다. 감사! – batkru

+0

수정 된 게시물보기 – gabbler

+0

Amaaaaaaaaaaaing! 나는 운없이 노력하면서 너무 많은 시간을 보냈다! 고맙습니다. – batkru