2015-10-01 17 views
8

Sto passando i file di immagine e video archiviati a: PHLivePhoto.requestLivePhotoWithResourceFileURLs e ottenendo un oggetto PHLivePhoto che posso visualizzare in PHLivePhotoView. Ma mi sto chiedendo, una volta che ho uno PHLivePhoto c'è un modo per salvarlo nella libreria di foto?C'è un modo per salvare una foto live nella libreria foto?

+0

mi chiedo la stessa cosa. La documentazione dice "Per importare una foto live nella libreria Foto, usa la classe PHAssetCreationRequest." Tuttavia, il metodo creationRequestForAsset non sembra prendere un PHLivePhoto. https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetCreationRequest_Class/index.html#//apple_ref/occ/clm/PHAssetCreationRequest/creationRequestForAsset – Landon

risposta

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

Impressionante! La scorsa notte, mentre stavo cercando di farlo funzionare, mi sono alzato per aggiungere ResourceWithType e mi aspettavo che ci fosse PHAssetResourceTypeLivePhoto. Quando non ci sono stato ho capito che mi mancava qualcosa. Ho completamente vetrato sulla sezione del tipo pairedvideo ... – Landon

5

Swift 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

È possibile aggiungere risorse anche con Data invece di utilizzare un file. Inoltre, "stampa (errore" stamperà sempre qualcosa, anche se ha funzionato.) Grazie per questo esempio. –