Fetch only photos of type PHAssetMediaTypeImage form asset collection type PHAssetCollectionTypeSmartAlbum
You should set up fetch options, its has a property predicate
, which can be used to filter videos. Below is an example of doing that.
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];//set up fetch options, mediaType is image.PHFetchOptions *options = [[PHFetchOptions alloc] init];options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage];for (NSInteger i =0; i < smartAlbums.count; i++) { PHAssetCollection *assetCollection = smartAlbums[i]; PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options]; NSLog(@"sub album title is %@, count is %ld", assetCollection.localizedTitle, assetsFetchResult.count); if (assetsFetchResult.count > 0) { for (PHAsset *asset in assetsFetchResult) { //you have got your image type asset. } }}
To do the same thing in swift :
let fetchOptions = PHFetchOptions()fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)