2015-10-01 12 views
8

私は保存された画像ファイルとビデオファイルを PHLivePhoto.requestLivePhotoWithResourceFileURLsに渡していて、PHLivePhotoViewに表示できるPHLivePhotoオブジェクトを取得しています。しかし、私はPHLivePhotoが写真の図書館にそれを保存する方法があると、私は疑問に思っていますか?ライブ写真をフォトライブラリに保存する方法はありますか?

+0

。ドキュメンテーションには、「代わりにライブ写真を写真ライブラリにインポートするには、PHAssetCreationRequestクラスを使用してください。ただし、creationRequestForAssetメソッドはPHLivePhotoを受け取りません。 https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetCreationRequest_Class/index.html#//apple_ref/occ/clm/PHAssetCreationRequest/creationRequestForAsset – Landon

答えて

13
NSURL *photoURL = ...; 
    NSURL *videoURL = ...; 

    [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ 
      PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset]; 


      //These types should be inferred from your files 

      //PHAssetResourceCreationOptions *photoOptions = [[PHAssetResourceCreationOptions alloc] init]; 
      //photoOptions.uniformTypeIdentifier = @"public.jpeg"; 

      //PHAssetResourceCreationOptions *videoOptions = [[PHAssetResourceCreationOptions alloc] init]; 
      //videoOptions.uniformTypeIdentifier = @"com.apple.quicktime-movie"; 

      [request addResourceWithType:PHAssetResourceTypePhoto fileURL:photoURL options:nil /*photoOptions*/]; 
      [request addResourceWithType:PHAssetResourceTypePairedVideo fileURL:videoURL options:nil /*videoOptions*/]; 

     } completionHandler:^(BOOL success, NSError * _Nullable error) { 
      NSLog(@"success? %d, error: %@",success,error); 
     }]; 
+0

驚くばかり!昨夜、これを動作させようとしていたとき、私はaddResourceWithTypeになってPHAssetResourceTypeLivePhotoが存在すると予想していました。私が何かを見逃していると思っていなかったとき。私はペアリングされたビデオタイプのセクションを完全に覆っていました... – Landon

5

スウィフト3:私はまったく同じことを疑問に思って

PHPhotoLibrary.shared().performChanges({ 

     let request = PHAssetCreationRequest.forAsset() 

     request.addResource(with: .photo, fileURL: photoURL, options: nil) 
     request.addResource(with: .pairedVideo, fileURL: videoURL, options: nil) 

    }) { (success, error) in 

     print(success) 
     print(error?.localizedDescription ?? "error") 
    } 
+0

ファイルを使用する代わりに、データでリソースを追加することも可能です。また、「印刷(エラー)」は、作業しても何かを印刷します。この例をありがとう。 –

関連する問題