2016-07-06 18 views
5

Sto utilizzando "PHAsset" per prelevare le risorse del rullino fotografico. Sto usandoRapido recupero di immagini e video dal rullino fotografico

PHAsset.fetchAssetsWithMediaType(.Image, options: options) 

per il recupero di tutte le immagini della galleria. Ma voglio recuperare tutte le immagini e i video contemporaneamente e mostrare in una vista insieme (come la vista della macchina fotografica di Instagram).

Qualcuno può dirmi come posso farlo?

+0

formattazione migliorata – Kld

risposta

3

Questo potrebbe funzionare per voi:

let allMedia = PHAsset.fetchAssetsWithOptions(fetchOptions) 
let allPhotos = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions) 
let allVideo = PHAsset.fetchAssetsWithMediaType(.Video, options: fetchOptions) 
print("Found \(allMedia.count) media") 
print("Found \(allPhotos.count) images") 
print("Found \(allVideo.count) videos") 

i tipi di supporto sono definiti come:

public enum PHAssetMediaType : Int { 

    case Unknown 
    case Image 
    case Video 
    case Audio 
} 

Perché non è un OptionSetType non è possibile utilizzare come un campo di bit e combinarli per PHAsset.fetchAssetsWithMediaType , ma il PHAsset.fetchAssetsWithOptions potrebbe funzionare per voi. Preparati a filtrare i tipi di audio dal set di risultati.

3

Fell libero da usare NSPredicate.

let fetchOptions = PHFetchOptions() 
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", 
               ascending: false)] 
fetchOptions.predicate = NSPredicate(format: "mediaType == %d || mediaType == %d", 
            PHAssetMediaType.image.rawValue, 
            PHAssetMediaType.video.rawValue) 
fetchOptions.fetchLimit = 100 

let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions) 
1

Actual Solution (swift 4 e probabilmente rapida 3): Nella tua viewDidLoad o dove mai è giusto per il vostro caso chiamata checkAuthorizationForPhotoLibraryAndGet()

private func getPhotosAndVideos(){ 

     let fetchOptions = PHFetchOptions() 
     fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate",ascending: false)] 
     fetchOptions.predicate = NSPredicate(format: "mediaType = %d || mediaType = %d", PHAssetMediaType.image.rawValue, PHAssetMediaType.video.rawValue) 
     let imagesAndVideos = PHAsset.fetchAssets(with: fetchOptions) 
     print(imagesAndVideos.count) 
    } 

    private func checkAuthorizationForPhotoLibraryAndGet(){ 
     let status = PHPhotoLibrary.authorizationStatus() 

     if (status == PHAuthorizationStatus.authorized) { 
      // Access has been granted. 
      getPhotosAndVideos() 
     }else { 
      PHPhotoLibrary.requestAuthorization({ (newStatus) in 

       if (newStatus == PHAuthorizationStatus.authorized) { 
         self.getPhotosAndVideos() 
       }else { 

       } 
      }) 
     } 
    } 

1) Assicurarsi che mediaType =% d è utilizzato al posto di mediaType ==% d

2) Assicurarsi di disporre effettivamente dell'autorizzazione e accedere alla libreria di foto, altrimenti fallirebbe in modo silenzioso.

Problemi correlati