Подтвердить что ты не робот

Выбирать только фотографии типа типа PHAssetMediaTypeImage типа сбора активов PHAssetCollectionTypeSmartAlbum

Я использую фреймворки Фотографии, чтобы получить список альбомов в iOS8. Я могу сделать это, используя

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil];

Это дает мне список всех смарт-альбомов, включая видео. Как отфильтровать видео из этого списка. Мне нужны только изображения.

Помощь будет оценена по достоинству. Спасибо.

4b9b3361

Ответ 1

Вы должны настроить параметры выборки, у него есть свойство predicate, которое можно использовать для фильтрации видео. Ниже приведен пример этого.

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.
        }
    }
}

Ответ 2

Чтобы сделать то же самое в быстрой:

let fetchOptions = PHFetchOptions()
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue)