Skip to content

Commit 70cde51

Browse files
committed
support of custom fetch
1 parent 2ca7959 commit 70cde51

11 files changed

+101
-15
lines changed

CTAssetsPickerController/CTAssetCollectionViewCell.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
@property (nonatomic, weak, nullable) UIColor *selectedBackgroundColor UI_APPEARANCE_SELECTOR;
4949

5050

51-
- (instancetype)initWithThumbnailSize:(CGSize)size reuseIdentifier:(nullable NSString *)reuseIdentifier;
51+
- (nonnull instancetype)initWithThumbnailSize:(CGSize)size reuseIdentifier:(nullable NSString *)reuseIdentifier;
5252
- (void)bind:(nonnull PHAssetCollection *)collection count:(NSUInteger)count;
5353

54-
@end
54+
@end

CTAssetsPickerController/CTAssetThumbnailStacks.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
@interface CTAssetThumbnailStacks : UIView
3131

3232
@property (nonatomic, assign) CGSize thumbnailSize;
33-
@property (nonatomic, copy, readonly) NSArray<CTAssetThumbnailView*> *thumbnailViews;
33+
@property (nonatomic, copy, readonly, nonnull) NSArray<CTAssetThumbnailView*> *thumbnailViews;
3434
@property (nonatomic, assign, readonly) UIEdgeInsets edgeInsets;
3535

3636
- (nonnull CTAssetThumbnailView *)thumbnailAtIndex:(NSUInteger)index;

CTAssetsPickerController/CTAssetsGridViewController.h

100644100755
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@
4242

4343
@interface CTAssetsGridViewController : UICollectionViewController
4444

45-
@property (nonatomic, weak) id<CTAssetsGridViewControllerDelegate> delegate;
45+
@property (nonatomic, weak, nullable) id<CTAssetsGridViewControllerDelegate> delegate;
4646
@property (nonatomic, strong, nonnull) PHAssetCollection *assetCollection;
47+
@property (nonatomic, strong, nullable) PHFetchResult<PHAsset*> *pickFromFetch;
4748

4849
@end
4950

50-

CTAssetsPickerController/CTAssetsGridViewController.m

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ @interface CTAssetsGridViewController ()
5353
<PHPhotoLibraryChangeObserver>
5454

5555
@property (nonatomic, weak) CTAssetsPickerController *picker;
56-
@property (nonatomic, strong) PHFetchResult *fetchResult;
56+
@property (nonatomic, strong) PHFetchResult<PHAsset*> *fetchResult;
5757
@property (nonatomic, strong) PHCachingImageManager *imageManager;
5858

5959
@property (nonatomic, assign) CGRect previousPreheatRect;
@@ -188,15 +188,28 @@ - (void)setupButtons
188188
target:self.picker
189189
action:@selector(finishPickingAssets:)];
190190
}
191+
192+
if (self.pickFromFetch && self.picker.showsCancelButton) {
193+
self.navigationItem.leftBarButtonItem =
194+
[[UIBarButtonItem alloc] initWithTitle:CTAssetsPickerLocalizedString(@"Cancel", nil)
195+
style:UIBarButtonItemStylePlain
196+
target:self.picker
197+
action:@selector(dismiss:)];
198+
}
191199
}
192200

193201
- (void)setupAssets
194202
{
195-
PHFetchResult *fetchResult =
196-
[PHAsset fetchAssetsInAssetCollection:self.assetCollection
197-
options:self.picker.assetsFetchOptions];
203+
if (_pickFromFetch) {
204+
self.fetchResult = _pickFromFetch;
205+
} else {
206+
PHFetchResult *fetchResult =
207+
[PHAsset fetchAssetsInAssetCollection:self.assetCollection
208+
options:self.picker.assetsFetchOptions];
209+
210+
self.fetchResult = fetchResult;
211+
}
198212

199-
self.fetchResult = fetchResult;
200213
[self reloadData];
201214
}
202215

@@ -799,4 +812,4 @@ - (void)collectionView:(UICollectionView *)collectionView didUnhighlightItemAtIn
799812
[self.picker.delegate assetsPickerController:self.picker didUnhighlightAsset:asset];
800813
}
801814

802-
@end
815+
@end

CTAssetsPickerController/CTAssetsPickerController.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,12 @@ NS_ASSUME_NONNULL_BEGIN
142142
*/
143143
@property (nonatomic, readonly, strong) UISplitViewController *childSplitViewController;
144144

145+
/**
146+
* Displays the picker to pick between the fetch result. Must be a PHAsset type fetch.
147+
*
148+
* It will not display the list of albums, but only the assets in the specified fetch result.
149+
*/
150+
@property (strong, nonatomic) PHFetchResult<PHAsset*> *pickFromFetch;
145151

146152
/**
147153
* @name Managing Selections
@@ -371,4 +377,4 @@ extern NSString * const CTAssetsPickerDidDeselectAssetNotification;
371377

372378
@end
373379

374-
NS_ASSUME_NONNULL_END
380+
NS_ASSUME_NONNULL_END

CTAssetsPickerController/CTAssetsPickerController.m

100644100755
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,13 @@ - (void)setupSplitViewController
250250
{
251251
CTAssetCollectionViewController *vc = [CTAssetCollectionViewController new];
252252
CTAssetsNavigationController *master = [[CTAssetsNavigationController alloc] initWithRootViewController:vc];
253+
254+
if (self.pickFromFetch) {
255+
CTAssetsGridViewController *grid = [CTAssetsGridViewController new];
256+
grid.pickFromFetch = self.pickFromFetch;
257+
master.viewControllers = @[grid];
258+
}
259+
253260
UINavigationController *detail = [self emptyNavigationController];
254261
UISplitViewController *svc = [UISplitViewController new];
255262

CTAssetsPickerDemo.xcodeproj/project.pbxproj

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
ADFC004C1B54FF740024CBB9 /* CTLayoutViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ADFC004B1B54FF740024CBB9 /* CTLayoutViewController.m */; };
3131
ADFE23881B46602400E44353 /* CTProgrammaticViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ADFE23871B46602400E44353 /* CTProgrammaticViewController.m */; };
3232
ADFE238B1B46868100E44353 /* CTApperanceViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = ADFE238A1B46868100E44353 /* CTApperanceViewController.m */; };
33+
D57946551CB452DE008C14D4 /* CTCustomFetchViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D57946541CB452DE008C14D4 /* CTCustomFetchViewController.m */; };
3334
/* End PBXBuildFile section */
3435

3536
/* Begin PBXFileReference section */
@@ -185,6 +186,8 @@
185186
ADFE23871B46602400E44353 /* CTProgrammaticViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CTProgrammaticViewController.m; sourceTree = "<group>"; };
186187
ADFE23891B46868100E44353 /* CTApperanceViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CTApperanceViewController.h; sourceTree = "<group>"; };
187188
ADFE238A1B46868100E44353 /* CTApperanceViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CTApperanceViewController.m; sourceTree = "<group>"; };
189+
D57946531CB452DE008C14D4 /* CTCustomFetchViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CTCustomFetchViewController.h; sourceTree = "<group>"; };
190+
D57946541CB452DE008C14D4 /* CTCustomFetchViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CTCustomFetchViewController.m; sourceTree = "<group>"; };
188191
F1B2FBB7FD634FB543BB7BB6 /* Pods.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods.framework; sourceTree = BUILT_PRODUCTS_DIR; };
189192
FD69CDFBA7D07D903CCC8B80 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = "<group>"; };
190193
/* End PBXFileReference section */
@@ -225,6 +228,8 @@
225228
AD18AFD61BCC9BA9008B507D /* CTSelectionOrderViewController.m */,
226229
ADA0730B1B4625AA009FB7C7 /* CTUITweaksViewController.h */,
227230
ADA0730C1B4625AA009FB7C7 /* CTUITweaksViewController.m */,
231+
D57946531CB452DE008C14D4 /* CTCustomFetchViewController.h */,
232+
D57946541CB452DE008C14D4 /* CTCustomFetchViewController.m */,
228233
AD4B06C91B44CD5A00D99C5A /* CTSortedAssetsViewController.h */,
229234
AD4B06CA1B44CD5A00D99C5A /* CTSortedAssetsViewController.m */,
230235
ADA073051B4515AF009FB7C7 /* CTPhotosViewController.h */,
@@ -423,7 +428,6 @@
423428
TargetAttributes = {
424429
ADD965C51AAD4C49002A26A2 = {
425430
CreatedOnToolsVersion = 6.1.1;
426-
DevelopmentTeam = VE5FET45CD;
427431
};
428432
};
429433
};
@@ -552,6 +556,7 @@
552556
AD18AFD71BCC9BA9008B507D /* CTSelectionOrderViewController.m in Sources */,
553557
ADFE238B1B46868100E44353 /* CTApperanceViewController.m in Sources */,
554558
ADE2713C1ACBA6BA0090EFB1 /* NSIndexSet+CTAssetsPickerController.m in Sources */,
559+
D57946551CB452DE008C14D4 /* CTCustomFetchViewController.m in Sources */,
555560
);
556561
runOnlyForDeploymentPostprocessing = 0;
557562
};

CTAssetsPickerDemo/CTMasterViewController.m

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ of this software and associated documentation files (the "Software"), to deal
3333
#import "CTDefaultAlbumViewController.h"
3434
#import "CTSelectionOrderViewController.h"
3535
#import "CTUITweaksViewController.h"
36+
#import "CTCustomFetchViewController.h"
3637

3738
#import "CTSortedAssetsViewController.h"
3839

@@ -71,7 +72,7 @@ - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger
7172
{
7273
switch (section) {
7374
case 0:
74-
return 6;
75+
return 7;
7576
break;
7677

7778
case 1:
@@ -166,6 +167,9 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
166167

167168
if (row == 5)
168169
title = @"UI tweaks";
170+
171+
if (row == 6)
172+
title = @"Custom Fetch";
169173
}
170174

171175
if (section == 1)
@@ -241,6 +245,8 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
241245

242246
if (row == 5)
243247
vc = (UIViewController *)[CTUITweaksViewController new];
248+
if (row == 6)
249+
vc = (UIViewController *)[CTCustomFetchViewController new];
244250
}
245251

246252
if (section == 1)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//
2+
// CTCustomFetchViewController.h
3+
// CTAssetsPickerDemo
4+
//
5+
// Created by Felix Dumit on 4/5/16.
6+
// Copyright © 2016 Clement T. All rights reserved.
7+
//
8+
9+
#import "CTBasicViewController.h"
10+
11+
@interface CTCustomFetchViewController : CTBasicViewController
12+
13+
@end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//
2+
// CTCustomFetchViewController.m
3+
// CTAssetsPickerDemo
4+
//
5+
// Created by Felix Dumit on 4/5/16.
6+
// Copyright © 2016 Clement T. All rights reserved.
7+
//
8+
9+
#import "CTCustomFetchViewController.h"
10+
11+
@implementation CTCustomFetchViewController
12+
13+
- (void)pickAssets:(id)sender {
14+
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
15+
dispatch_async(dispatch_get_main_queue(), ^{
16+
// init picker
17+
CTAssetsPickerController *picker = [[CTAssetsPickerController alloc] init];
18+
19+
// set delegate
20+
picker.delegate = self;
21+
22+
// set custom fetch
23+
picker.pickFromFetch = [PHAsset fetchAssetsWithOptions:nil];
24+
25+
// to present picker as a form sheet in iPad
26+
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) picker.modalPresentationStyle = UIModalPresentationFormSheet;
27+
28+
// present picker
29+
[self presentViewController:picker
30+
animated:YES
31+
completion:nil];
32+
});
33+
}];
34+
}
35+
36+
@end

0 commit comments

Comments
 (0)