Skip to content

Commit bbf9550

Browse files
committed
Use ASPhotosImageRequest in ASMultiplexImageNode, in a backwards-compatible way
1 parent ee0c027 commit bbf9550

5 files changed

Lines changed: 18 additions & 22 deletions

File tree

AsyncDisplayKit.xcodeproj/project.pbxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,9 +374,10 @@
374374
B350625D1B0111740018CF92 /* Photos.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943141A1575670030A7D0 /* Photos.framework */; };
375375
B350625E1B0111780018CF92 /* AssetsLibrary.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 051943121A1575630030A7D0 /* AssetsLibrary.framework */; };
376376
B350625F1B0111800018CF92 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 058D09AF195D04C000B7D73C /* Foundation.framework */; };
377-
CC7FD9DE1BB5E962005CCB2B /* ASPhotosImageRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7FD9DC1BB5E962005CCB2B /* ASPhotosImageRequest.h */; settings = {ASSET_TAGS = (); }; };
377+
CC7FD9DE1BB5E962005CCB2B /* ASPhotosImageRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7FD9DC1BB5E962005CCB2B /* ASPhotosImageRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
378378
CC7FD9DF1BB5E962005CCB2B /* ASPhotosImageRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = CC7FD9DD1BB5E962005CCB2B /* ASPhotosImageRequest.m */; settings = {ASSET_TAGS = (); }; };
379379
CC7FD9E11BB5F750005CCB2B /* ASPhotosImageRequestTests.m in Sources */ = {isa = PBXBuildFile; fileRef = CC7FD9E01BB5F750005CCB2B /* ASPhotosImageRequestTests.m */; settings = {ASSET_TAGS = (); }; };
380+
CC7FD9E21BB603FF005CCB2B /* ASPhotosImageRequest.h in Headers */ = {isa = PBXBuildFile; fileRef = CC7FD9DC1BB5E962005CCB2B /* ASPhotosImageRequest.h */; settings = {ATTRIBUTES = (Public, ); }; };
380381
D785F6621A74327E00291744 /* ASScrollNode.h in Headers */ = {isa = PBXBuildFile; fileRef = D785F6601A74327E00291744 /* ASScrollNode.h */; settings = {ATTRIBUTES = (Public, ); }; };
381382
D785F6631A74327E00291744 /* ASScrollNode.m in Sources */ = {isa = PBXBuildFile; fileRef = D785F6611A74327E00291744 /* ASScrollNode.m */; };
382383
DB7121BCD50849C498C886FB /* libPods-AsyncDisplayKitTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = EFA731F0396842FF8AB635EE /* libPods-AsyncDisplayKitTests.a */; };
@@ -1218,6 +1219,7 @@
12181219
9C8221961BA237B80037F19A /* ASStackBaselinePositionedLayout.h in Headers */,
12191220
9C49C3701B853961000B0DD5 /* ASStackLayoutable.h in Headers */,
12201221
34EFC7701B701CFA00AD841F /* ASStackLayoutDefines.h in Headers */,
1222+
CC7FD9E21BB603FF005CCB2B /* ASPhotosImageRequest.h in Headers */,
12211223
34EFC7711B701CFF00AD841F /* ASStackLayoutSpec.h in Headers */,
12221224
2767E9411BB19BD600EA9B77 /* ASViewController.h in Headers */,
12231225
044284FE1BAA387800D16268 /* ASStackLayoutSpecUtilities.h in Headers */,

AsyncDisplayKit/ASMultiplexImageNode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ didFinishDownloadingImageWithIdentifier:(id)imageIdentifier
195195
* @abstract An image URL for the specified identifier.
196196
* @param imageNode The sender.
197197
* @param imageIdentifier The identifier for the image that will be downloaded.
198-
* @discussion Supported URLs include assets-library, Photo framework URLs (ph://), HTTP, HTTPS, and FTP URLs. If the
198+
* @discussion Supported URLs include assets-library, URLs converted from ASPhotosImageRequest, HTTP, HTTPS, and FTP URLs. If the
199199
* image is already available to the data source, it should be provided via <[ASMultiplexImageNodeDataSource
200200
* multiplexImageNode:imageForImageIdentifier:]> instead.
201201
* @returns An NSURL for the image identified by `imageIdentifier`, or nil if none is available.

AsyncDisplayKit/ASMultiplexImageNode.mm

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import "ASBaseDefines.h"
1919
#import "ASDisplayNode+Subclasses.h"
2020
#import "ASLog.h"
21+
#import "ASPhotosImageRequest.h"
2122

2223
#if !AS_IOS8_SDK_OR_LATER
2324
#error ASMultiplexImageNode can be used on iOS 7, but must be linked against the iOS 8 SDK.
@@ -26,8 +27,6 @@
2627
NSString *const ASMultiplexImageNodeErrorDomain = @"ASMultiplexImageNodeErrorDomain";
2728

2829
static NSString *const kAssetsLibraryURLScheme = @"assets-library";
29-
static NSString *const kPHAssetURLScheme = @"ph";
30-
static NSString *const kPHAssetURLPrefix = @"ph://";
3130

3231
/**
3332
@abstract Signature for the block to be performed after an image has loaded.
@@ -120,14 +119,14 @@ - (void)_fetchImageWithIdentifierFromCache:(id)imageIdentifier URL:(NSURL *)imag
120119
- (void)_loadALAssetWithIdentifier:(id)imageIdentifier URL:(NSURL *)assetURL completion:(void (^)(UIImage *image, NSError *error))completionBlock;
121120

122121
/**
123-
@abstract Loads the image corresponding to the given assetURL from the Photos framework.
122+
@abstract Loads the image corresponding to the given image request from the Photos framework.
124123
@param imageIdentifier The identifier for the image to be loaded. May not be nil.
125-
@param assetURL The photos framework URL (e.g., "ph://identifier") of the image to load, from PHAsset. May not be nil.
124+
@param request The photos image request to load. May not be nil.
126125
@param completionBlock The block to be performed when the image has been loaded, if possible. May not be nil.
127126
@param image The image that was loaded. May be nil if no image could be downloaded.
128127
@param error An error describing why the load failed, if it failed; nil otherwise.
129128
*/
130-
- (void)_loadPHAssetWithIdentifier:(id)imageIdentifier URL:(NSURL *)assetURL completion:(void (^)(UIImage *image, NSError *error))completionBlock;
129+
- (void)_loadPHAssetWithRequest:(ASPhotosImageRequest *)request identifier:(id)imageIdentifier completion:(void (^)(UIImage *image, NSError *error))completionBlock;
131130

132131
/**
133132
@abstract Downloads the image corresponding to the given imageIdentifier from the given URL.
@@ -456,8 +455,8 @@ - (void)_loadNextImage
456455
}];
457456
}
458457
// Likewise, if it's a iOS 8 Photo asset, we need to fetch it accordingly.
459-
else if (AS_AT_LEAST_IOS8 && [[nextImageURL scheme] isEqualToString:kPHAssetURLScheme]) {
460-
[self _loadPHAssetWithIdentifier:nextImageIdentifier URL:nextImageURL completion:^(UIImage *image, NSError *error) {
458+
else if (ASPhotosImageRequest *request = nextImageURL.asyncdisplaykit_photosRequest) {
459+
[self _loadPHAssetWithRequest:request identifier:nextImageIdentifier completion:^(UIImage *image, NSError *error) {
461460
ASMultiplexImageNodeCLogDebug(@"[%p] Acquired next image (%@) from Photos Framework", weakSelf, nextImageIdentifier);
462461
finishedLoadingBlock(image, nextImageIdentifier, error);
463462
}];
@@ -511,17 +510,15 @@ - (void)_loadALAssetWithIdentifier:(id)imageIdentifier URL:(NSURL *)assetURL com
511510
}];
512511
}
513512

514-
- (void)_loadPHAssetWithIdentifier:(id)imageIdentifier URL:(NSURL *)assetURL completion:(void (^)(UIImage *image, NSError *error))completionBlock
513+
- (void)_loadPHAssetWithRequest:(ASPhotosImageRequest *)request identifier:(id)imageIdentifier completion:(void (^)(UIImage *image, NSError *error))completionBlock
515514
{
516515
ASDisplayNodeAssert(AS_AT_LEAST_IOS8, @"PhotosKit is unavailable on iOS 7.");
517516
ASDisplayNodeAssertNotNil(imageIdentifier, @"imageIdentifier is required");
518-
ASDisplayNodeAssertNotNil(assetURL, @"assetURL is required");
517+
ASDisplayNodeAssertNotNil(request, @"request is required");
519518
ASDisplayNodeAssertNotNil(completionBlock, @"completionBlock is required");
520519

521520
// Get the PHAsset itself.
522-
ASDisplayNodeAssertTrue([[assetURL absoluteString] hasPrefix:kPHAssetURLPrefix]);
523-
NSString *assetIdentifier = [[assetURL absoluteString] substringFromIndex:[kPHAssetURLPrefix length]];
524-
PHFetchResult *assetFetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[assetIdentifier] options:nil];
521+
PHFetchResult *assetFetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:@[request.assetIdentifier] options:nil];
525522
if ([assetFetchResult count] == 0) {
526523
// Error.
527524
completionBlock(nil, nil);
@@ -531,15 +528,10 @@ - (void)_loadPHAssetWithIdentifier:(id)imageIdentifier URL:(NSURL *)assetURL com
531528
// Get the best image we can.
532529
PHAsset *imageAsset = [assetFetchResult firstObject];
533530

534-
PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
535-
requestOptions.version = PHImageRequestOptionsVersionCurrent;
536-
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
537-
requestOptions.resizeMode = PHImageRequestOptionsResizeModeNone;
538-
539531
[[PHImageManager defaultManager] requestImageForAsset:imageAsset
540-
targetSize:CGSizeMake(2048.0, 2048.0) // Ideally we would use PHImageManagerMaximumSize and kill the options, but we get back nil when requesting images of video assets. rdar://18447788
541-
contentMode:PHImageContentModeDefault
542-
options:requestOptions
532+
targetSize:request.targetSize
533+
contentMode:request.contentMode
534+
options:request.options
543535
resultHandler:^(UIImage *image, NSDictionary *info) {
544536
completionBlock(image, info[PHImageErrorKey]);
545537
}];

AsyncDisplayKit/AsyncDisplayKit.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#import <AsyncDisplayKit/ASBasicImageDownloader.h>
1919
#import <AsyncDisplayKit/ASMultiplexImageNode.h>
2020
#import <AsyncDisplayKit/ASNetworkImageNode.h>
21+
#import <AsyncDisplayKit/ASPhotosImageRequest.h>
2122

2223
#import <AsyncDisplayKit/ASTableView.h>
2324
#import <AsyncDisplayKit/ASCollectionView.h>

AsyncDisplayKit/Details/ASPhotosImageRequest.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ extern NSString *const ASPhotosURLScheme;
6060
@return `YES` if `object` is an equivalent image request, `NO` otherwise.
6161
*/
6262
- (BOOL)isEqual:(id)object;
63+
6364
@end
6465

6566
@interface NSURL (ASPhotosRequestConverting)

0 commit comments

Comments
 (0)