2015-10-01 8 views
8

Mijam przechowywane obrazy i pliki wideo do: PHLivePhoto.requestLivePhotoWithResourceFileURLs i otrzymuję obiekt PHLivePhoto, który mogę wyświetlić w PHLivePhotoView. Ale zastanawiam się, kiedy mam PHLivePhoto jest sposób, aby zapisać go do biblioteki zdjęć?Czy istnieje sposób na zapisanie zdjęcia na żywo w bibliotece zdjęć?

+0

Zastanawiam się dokładnie to samo. Dokumentacja mówi "Aby zaimportować Live Photo do biblioteki Photos, użyj klasy PHAssetCreationRequest." Jednak metoda creationRequestForAsset nie wydaje się mieć PHLivePhoto. https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetCreationRequest_Class/index.html#//apple_ref/occ/clm/PHAssetCreationRequest/creationRequestForAsset – Landon

Odpowiedz

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

Awesome! Ostatniej nocy, kiedy próbowałem uruchomić to, doszedłem do addResourceWithType i spodziewałem się, że będzie to PHAssetResourceTypeLivePhoto. Kiedy nie było, doszedłem do wniosku, że czegoś mi brakuje. Całkowicie przeszklono sekcję typu 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

Istnieje również możliwość dodawania zasobów do danych, zamiast do pliku. Ponadto, "print (error" zawsze będzie drukował coś, nawet jeśli zadziałało. Dzięki za ten przykład. –