2015-10-01 19 views
8

Tôi đang chuyển các tệp hình ảnh và video được lưu trữ tới: PHLivePhoto.requestLivePhotoWithResourceFileURLs và nhận đối tượng PHLivePhoto mà tôi có thể hiển thị trong PHLivePhotoView. Nhưng tôi tự hỏi, một khi tôi có một PHLivePhoto là có một cách để lưu nó vào Thư viện ảnh?Có cách nào để lưu Live Photo vào Thư viện ảnh không?

+0

tôi tự hỏi chính xác những điều tương tự. Tài liệu nói "Để thay vì nhập ảnh trực tiếp vào thư viện Ảnh, hãy sử dụng lớp PHAssetCreationRequest." Tuy nhiên, phương thức createRequestForAsset dường như không có PHLivePhoto. https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetCreationRequest_Class/index.html#//apple_ref/occ/clm/PHAssetCreationRequest/creationRequestForAsset – Landon

Trả lời

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

Tuyệt vời! Đêm qua khi tôi đang cố gắng để có được điều này để làm việc tôi đã lên đến addResourceWithType và dự kiến ​​sẽ có PHAssetResourceTypeLivePhoto. Khi không có tôi đã tìm thấy tôi đã mất tích một cái gì đó. Tôi đã hoàn toàn lóe lên phần loại cặp video ... – 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

Cũng có thể thêm tài nguyên với Dữ liệu thay vì sử dụng tệp. Ngoài ra, "in (lỗi" sẽ luôn in một cái gì đó, ngay cả khi nó làm việc. Cảm ơn ví dụ này. –

Các vấn đề liên quan