2016-07-06 11 views
5

Kamera rulosu varlıkları almak için "PHAsset" kullanıyorum. Tüm galeri görüntülerini almak içinSwift kamera rulosundan görüntüler ve videolar getiriyor

kullanıyorum. Ancak tüm Görüntüleri ve Videoları aynı anda almak ve koleksiyon görünümünde (Instagram kamera görüntüsü gibi) göstermek istiyorum.

Herhangi biri, lütfen nasıl yapabilirim?

+0

geliştirilmiş biçimlendirme – Kld

cevap

3

Bu sizin için işe yarayabilecek:

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

Medya türleri olarak tanımlanmıştır:

public enum PHAssetMediaType : Int { 

    case Unknown 
    case Image 
    case Video 
    case Audio 
} 

bir OptionSetType değil bir saklayıcısında gibi kullanabilir ve PHAsset.fetchAssetsWithMediaType için bunları birleştirmek edemez Çünkü Ancak PHAsset.fetchAssetsWithOptions sizin için işe yarayabilir. Ses kümelerini sonuç kümesinden filtrelemeye hazır olun.

3

NSPredicate'u kullanmakta serbesttir.

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

Gerçek Çözüm (4 hızlı ve muhtemelen hızlı 3): En viewDidLoad ya da nereye kadar ise davanız çağrı 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) emin MediaType =% d olduğundan emin olun için doğru mediaType ==% yerine kullanıldı

2) Yetkilendirmeye sahip olduğunuzdan ve fotoğraf kitaplığına erişebildiğinizden emin olun, aksi halde sessizce başarısız olur.