Skip to content
This repository was archived by the owner on Apr 6, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions QBImagePicker/QBAlbumsViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,17 @@ - (void)updateAssetCollections
[assetCollections addObject:assetCollection];
}];

self.assetCollections = assetCollections;
self.assetCollections = [assetCollections filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(PHAssetCollection * _Nonnull assetCollection, NSDictionary<NSString *,id> * _Nullable bindings) {

if (!self.imagePickerController.excludeEmptyAlbums)
{
return YES;
}

PHFetchOptions *options = self.imagePickerController.fetchOptions;
PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options];
return fetchResult.count > 0;
}]];
}

- (UIImage *)placeholderImageWithSize:(CGSize)size
Expand Down Expand Up @@ -272,6 +282,11 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger
return self.assetCollections.count;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
QBAlbumCell *cell = [tableView dequeueReusableCellWithIdentifier:@"AlbumCell" forIndexPath:indexPath];
Expand All @@ -281,21 +296,7 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
// Thumbnail
PHAssetCollection *assetCollection = self.assetCollections[indexPath.row];

PHFetchOptions *options = [PHFetchOptions new];

switch (self.imagePickerController.mediaType) {
case QBImagePickerMediaTypeImage:
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
break;

case QBImagePickerMediaTypeVideo:
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeVideo];
break;

default:
break;
}

PHFetchOptions* options = self.imagePickerController.fetchOptions;
PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options];
PHImageManager *imageManager = [PHImageManager defaultManager];

Expand Down
17 changes: 2 additions & 15 deletions QBImagePicker/QBAssetsViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -228,21 +228,7 @@ - (void)updateSelectionInfo
- (void)updateFetchRequest
{
if (self.assetCollection) {
PHFetchOptions *options = [PHFetchOptions new];

switch (self.imagePickerController.mediaType) {
case QBImagePickerMediaTypeImage:
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
break;

case QBImagePickerMediaTypeVideo:
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeVideo];
break;

default:
break;
}

PHFetchOptions *options = self.imagePickerController.fetchOptions;
self.fetchResult = [PHAsset fetchAssetsInAssetCollection:self.assetCollection options:options];

if ([self isAutoDeselectEnabled] && self.imagePickerController.selectedAssets.count > 0) {
Expand Down Expand Up @@ -539,6 +525,7 @@ - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView
label.text = [NSString stringWithFormat:format, numberOfVideos];
}
break;

}

return footerView;
Expand Down
5 changes: 3 additions & 2 deletions QBImagePicker/QBImagePicker.storyboard
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
<capability name="Constraints to layout margins" minToolsVersion="6.0"/>
</dependencies>
<scenes>
Expand Down
7 changes: 6 additions & 1 deletion QBImagePicker/QBImagePickerController.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
typedef NS_ENUM(NSUInteger, QBImagePickerMediaType) {
QBImagePickerMediaTypeAny = 0,
QBImagePickerMediaTypeImage,
QBImagePickerMediaTypeVideo
QBImagePickerMediaTypeVideo,
};

@interface QBImagePickerController : UIViewController
Expand All @@ -36,6 +36,8 @@ typedef NS_ENUM(NSUInteger, QBImagePickerMediaType) {
@property (nonatomic, strong, readonly) NSMutableOrderedSet *selectedAssets;

@property (nonatomic, copy) NSArray *assetCollectionSubtypes;
@property (nonatomic, copy) NSArray *assetMediaSubtypes;
@property (nonatomic, assign) BOOL excludeEmptyAlbums;
@property (nonatomic, assign) QBImagePickerMediaType mediaType;

@property (nonatomic, assign) BOOL allowsMultipleSelection;
Expand All @@ -48,4 +50,7 @@ typedef NS_ENUM(NSUInteger, QBImagePickerMediaType) {
@property (nonatomic, assign) NSUInteger numberOfColumnsInPortrait;
@property (nonatomic, assign) NSUInteger numberOfColumnsInLandscape;

@property (nonatomic, copy) PHFetchOptions *fetchOptions;


@end
50 changes: 50 additions & 0 deletions QBImagePicker/QBImagePickerController.m
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
#import "QBAlbumsViewController.h"

@interface QBImagePickerController ()
@property (nonatomic, strong) PHFetchOptions *defaultFetchOptions;

@property (nonatomic, strong) UINavigationController *albumsNavigationController;

Expand All @@ -38,6 +39,7 @@ - (instancetype)init
self.minimumNumberOfSelection = 1;
self.numberOfColumnsInPortrait = 4;
self.numberOfColumnsInLandscape = 7;
self.excludeEmptyAlbums = YES;

_selectedAssets = [NSMutableOrderedSet orderedSet];

Expand Down Expand Up @@ -74,4 +76,52 @@ - (void)setUpAlbumsViewController
self.albumsNavigationController = navigationController;
}

- (PHFetchOptions *)fetchOptions
{
if (!_fetchOptions)
{
if (self.defaultFetchOptions)
{
return self.defaultFetchOptions;
}
PHFetchOptions *options = [PHFetchOptions new];
NSPredicate *mediaTypePredicate;
switch (self.mediaType) {
case QBImagePickerMediaTypeImage:
mediaTypePredicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
break;

case QBImagePickerMediaTypeVideo:
mediaTypePredicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeVideo];
break;

default:
break;
}

NSPredicate *mediaSubTtypePredicate;
if (self.assetMediaSubtypes)
{
mediaSubTtypePredicate = [NSPredicate predicateWithFormat:@"mediaSubtype in %@ ", self.assetMediaSubtypes];
}
NSMutableArray *predicates = [@[] mutableCopy];
if (mediaTypePredicate)
{
[predicates addObject:mediaTypePredicate];
}
if (mediaSubTtypePredicate)
{
[predicates addObject:mediaSubTtypePredicate];
}
if (predicates.count > 0)
{
NSCompoundPredicate *preidcate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
options.predicate = preidcate;
}
self.defaultFetchOptions = options;
return options;
}
return _fetchOptions;
}

@end
3 changes: 2 additions & 1 deletion QBImagePickerDemo/ViewController.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
{
QBImagePickerController *imagePickerController = [QBImagePickerController new];
imagePickerController.delegate = self;
imagePickerController.mediaType = QBImagePickerMediaTypeAny;
imagePickerController.mediaType = QBImagePickerMediaTypeImage;
imagePickerController.assetMediaSubtypes = @[@(PHAssetMediaSubtypePhotoLive)];
imagePickerController.allowsMultipleSelection = (indexPath.section == 1);
imagePickerController.showsNumberOfSelectedAssets = YES;

Expand Down