2016-07-06 6 views
5

카메라 롤 에셋을 가져 오는 데 "PHAsset"을 사용하고 있습니다. 사용중인 갤러리 이미지를 모두 가져 오는 데카메라 롤에서 이미지와 비디오를 신속하게 가져옵니다.

PHAsset.fetchAssetsWithMediaType(.Image, options: options) 

을 사용하고 있습니다. 그러나 모든 이미지와 비디오를 동시에 가져 와서 컬렉션보기 (예 : Instagram 카메라보기)로 표시하려고합니다.

내가 어떻게 할 수 있습니까?

+0

향상된 형식 – Kld

답변

3

이 당신을 위해 작동 될 수 있습니다

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

미디어 유형은 다음과 같이 정의된다 :

public enum PHAssetMediaType : Int { 

    case Unknown 
    case Image 
    case Video 
    case Audio 
} 

그것이 OptionSetType가 아니라 당신이 비트 필드처럼 사용하고 PHAsset.fetchAssetsWithMediaType 그들을 결합 할 수 있기 때문에 하지만 PHAsset.fetchAssetsWithOptions이 도움이 될 수 있습니다. 결과 세트에서 Audio 유형을 필터링 할 준비를하십시오.

3

무료 사용 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

실제 솔루션 (4 신속하고 아마 빠른 3) : 당신의 viewDidLoad 또는 어디에 적에서 는 경우 통화 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) 확인 mediaType 매개 = % d를 확인하십시오 적합한 mediaType == % d 대신 사용됨

2) 실제로 권한이 있는지 확인하고 사진 라이브러리에 액세스 할 수 있습니다. 그렇지 않으면 자동으로 실패합니다.