diff --git a/AsyncDisplayKit/ASCollectionView.h b/AsyncDisplayKit/ASCollectionView.h index 774a44a740..f93525677a 100644 --- a/AsyncDisplayKit/ASCollectionView.h +++ b/AsyncDisplayKit/ASCollectionView.h @@ -13,6 +13,7 @@ #import #import #import +#import @class ASCellNode; @class ASCollectionNode; @@ -43,6 +44,7 @@ NS_ASSUME_NONNULL_BEGIN */ - (instancetype)initWithCollectionViewLayout:(UICollectionViewLayout *)layout; - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout; +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout layoutFacilitator:(id)layoutFacilitator; // The corresponding ASCollectionNode, which exists even if directly allocating & handling the view class. @property (nonatomic, weak, readonly) ASCollectionNode *collectionNode; diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index 5e8b7c03b1..fd973ca374 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -20,6 +20,8 @@ #import "UICollectionViewLayout+ASConvenience.h" #import "_ASDisplayLayer.h" +#import "ASCollectionViewLayoutFacilitatorProtocol.h" + static const NSUInteger kASCollectionViewAnimationNone = UITableViewRowAnimationNone; static const ASSizeRange kInvalidSizeRange = {CGSizeZero, CGSizeZero}; static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; @@ -67,6 +69,8 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; ASRangeController *_rangeController; ASCollectionViewLayoutController *_layoutController; ASCollectionViewFlowLayoutInspector *_flowLayoutInspector; + + id _layoutFacilitator; BOOL _performingBatchUpdates; NSMutableArray *_batchUpdateBlocks; @@ -137,6 +141,13 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; return [self _initWithFrame:frame collectionViewLayout:layout ownedByNode:NO]; } +- (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout layoutFacilitator:(id)layoutFacilitator +{ + self = [self _initWithFrame:frame collectionViewLayout:layout ownedByNode:NO]; + _layoutFacilitator = layoutFacilitator; + return self; +} + // FIXME: This method is deprecated and will probably be removed in or shortly after 2.0. - (instancetype)initWithFrame:(CGRect)frame collectionViewLayout:(UICollectionViewLayout *)layout asyncDataFetching:(BOOL)asyncDataFetchingEnabled { @@ -412,12 +423,14 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; - (void)insertSections:(NSIndexSet *)sections { ASDisplayNodeAssertMainThread(); + [_layoutFacilitator collectionViewInsertingSectionsAtIndexSet:sections]; [_dataController insertSections:sections withAnimationOptions:kASCollectionViewAnimationNone]; } - (void)deleteSections:(NSIndexSet *)sections { ASDisplayNodeAssertMainThread(); + [_layoutFacilitator collectionViewDeletingSectionsAtIndexSet:sections]; [_dataController deleteSections:sections withAnimationOptions:kASCollectionViewAnimationNone]; } @@ -436,6 +449,7 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; - (void)insertItemsAtIndexPaths:(NSArray *)indexPaths { ASDisplayNodeAssertMainThread(); + [_layoutFacilitator collectionViewInsertingCellAtIndexPaths:indexPaths]; [_dataController insertRowsAtIndexPaths:indexPaths withAnimationOptions:kASCollectionViewAnimationNone]; } diff --git a/AsyncDisplayKit/ASCollectionViewLayoutFacilitatorProtocol.h b/AsyncDisplayKit/ASCollectionViewLayoutFacilitatorProtocol.h new file mode 100644 index 0000000000..323b64031c --- /dev/null +++ b/AsyncDisplayKit/ASCollectionViewLayoutFacilitatorProtocol.h @@ -0,0 +1,20 @@ +// +// ASCollectionViewLayoutFacilitatorProtocol.h +// Pods +// +// Created by Bin Liu on 1/13/16. +// +// + +#ifndef ASCollectionViewLayoutFacilitatorProtocol_h +#define ASCollectionViewLayoutFacilitatorProtocol_h + +@protocol ASCollectionViewLayoutFacilitatorProtocol + +- (void)collectionViewInsertingCellAtIndexPaths:(NSArray *)indexPaths; +- (void)collectionViewInsertingSectionsAtIndexSet:(NSIndexSet *)indexes; +- (void)collectionViewDeletingSectionsAtIndexSet:(NSIndexSet *)indexes; + +@end + +#endif /* ASCollectionViewLayoutFacilitatorProtocol_h */