2016-07-06 1 views
5

J'utilise "PHAsset" pour extraire les pellicules. J'utiliseRécupération rapide d'images et de vidéos à partir de la pellicule

PHAsset.fetchAssetsWithMediaType(.Image, options: options) 

pour extraire toutes les images de la galerie. Mais je veux aller chercher toutes les images et vidéos en même temps et les montrer dans une vue de collection (comme la vue de caméra Instagram).

Quelqu'un peut-il s'il vous plaît me dire comment puis-je le faire?

+0

formatage amélioré – Kld

Répondre

3

Cela pourrait fonctionner pour vous:

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") 

Les types de médias sont définis comme:

public enum PHAssetMediaType : Int { 

    case Unknown 
    case Image 
    case Video 
    case Audio 
} 

Parce que ce n'est pas un OptionSetType vous ne pouvez pas l'utiliser comme un bitfield et les combiner pour PHAsset.fetchAssetsWithMediaType , mais le PHAsset.fetchAssetsWithOptions pourrait fonctionner pour vous. Soyez prêt à filtrer les types audio du jeu de résultats.

3

Libre d'utiliser 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 (rapide 4 et probablement rapide 3): Dans votre viewDidLoad ou où est toujours pour votre appel cas 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) Assurez-vous que mediaType =% d est utilisé à la place de mediaType ==% d

2) Assurez-vous que vous avez réellement l'autorisation et pouvez accéder à la photothèque, sinon elle échouerait silencieusement.