2015-10-01 2 views
8

Я передаю сохраненные изображения и видео файлы в: PHLivePhoto.requestLivePhotoWithResourceFileURLs и получает объект PHLivePhoto, который я могу отобразить в PHLivePhotoView. Но мне интересно, как только у меня есть PHLivePhoto, есть ли способ сохранить его в Библиотеке фотографий?Есть ли способ сохранить живое фото в библиотеке фотографий?

+0

Мне интересно, ту же самую вещь. В документации говорится: «Чтобы импортировать библиотеку Live Photo в Photos, используйте класс 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. Когда я не понял, что я что-то упустил. Я полностью застеклен над секцией типа 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

Можно также добавлять ресурсы с данными, а не использовать файл. Кроме того, «print (error» всегда будет печатать что-то, даже если оно сработает. Спасибо за этот пример. –

Смежные вопросы