diff --git a/AsyncDisplayKit/ASCollectionNode.h b/AsyncDisplayKit/ASCollectionNode.h index 1b14087356..49ca3ffe5a 100644 --- a/AsyncDisplayKit/ASCollectionNode.h +++ b/AsyncDisplayKit/ASCollectionNode.h @@ -27,25 +27,53 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, readonly) ASCollectionView *view; /** - * Tuning parameters for a range type. + * Tuning parameters for a range type in full mode. * * @param rangeType The range type to get the tuning parameters for. * - * @returns A tuning parameter value for the given range type. + * @returns A tuning parameter value for the given range type in full mode. * - * Defaults to the render range having one sceenful both leading and trailing and the preload range having two - * screenfuls in both directions. + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType; /** - * Set the tuning parameters for a range type. + * Set the tuning parameters for a range type in full mode. * * @param tuningParameters The tuning parameters to store for a range type. * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType; +/** + * Tuning parameters for a range type in the specified mode. + * + * @param rangeMode The range mode to get the runing parameters for. + * @param rangeType The range type to get the tuning parameters for. + * + * @returns A tuning parameter value for the given range type in the given mode. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + +/** + * Set the tuning parameters for a range type in the specigied mode. + * + * @param tuningParameters The tuning parameters to store for a range type. + * @param rangeMode The range mode to set the runing parameters for. + * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + /** * Reload everything from scratch, destroying the working range and all cached nodes. * diff --git a/AsyncDisplayKit/ASCollectionNode.mm b/AsyncDisplayKit/ASCollectionNode.mm index 3d5c3d9288..68e7d9a341 100644 --- a/AsyncDisplayKit/ASCollectionNode.mm +++ b/AsyncDisplayKit/ASCollectionNode.mm @@ -201,12 +201,22 @@ - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType { - return [self.view.rangeController tuningParametersForRangeType:rangeType]; + return [self.view.rangeController tuningParametersForRangeMode:ASLayoutRangeModeFull rangeType:rangeType]; } - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType { - return [self.view.rangeController setTuningParameters:tuningParameters forRangeType:rangeType]; + [self.view.rangeController setTuningParameters:tuningParameters forRangeMode:ASLayoutRangeModeFull rangeType:rangeType]; +} + +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType +{ + return [self.view.rangeController tuningParametersForRangeMode:rangeMode rangeType:rangeType]; +} + +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType +{ + return [self.view.rangeController setTuningParameters:tuningParameters forRangeMode:rangeMode rangeType:rangeType]; } - (void)reloadDataWithCompletion:(void (^)())completion diff --git a/AsyncDisplayKit/ASCollectionView.h b/AsyncDisplayKit/ASCollectionView.h index 418d22c2d3..8a4a597f96 100644 --- a/AsyncDisplayKit/ASCollectionView.h +++ b/AsyncDisplayKit/ASCollectionView.h @@ -52,25 +52,53 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, weak) id asyncDataSource; /** - * Tuning parameters for a range type. + * Tuning parameters for a range type in full mode. * * @param rangeType The range type to get the tuning parameters for. * - * @returns A tuning parameter value for the given range type. + * @returns A tuning parameter value for the given range type in full mode. * - * Defaults to the render range having one sceenful both leading and trailing and the preload range having two - * screenfuls in both directions. + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType; /** - * Set the tuning parameters for a range type. + * Set the tuning parameters for a range type in full mode. * * @param tuningParameters The tuning parameters to store for a range type. * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType; +/** + * Tuning parameters for a range type in the specified mode. + * + * @param rangeMode The range mode to get the runing parameters for. + * @param rangeType The range type to get the tuning parameters for. + * + * @returns A tuning parameter value for the given range type in the given mode. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + +/** + * Set the tuning parameters for a range type in the specigied mode. + * + * @param tuningParameters The tuning parameters to store for a range type. + * @param rangeMode The range mode to set the runing parameters for. + * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + /** * The number of screens left to scroll before the delegate -collectionView:beginBatchFetchingWithContext: is called. * diff --git a/AsyncDisplayKit/ASCollectionView.mm b/AsyncDisplayKit/ASCollectionView.mm index d8019a3e08..8d7e6fae76 100644 --- a/AsyncDisplayKit/ASCollectionView.mm +++ b/AsyncDisplayKit/ASCollectionView.mm @@ -347,15 +347,14 @@ static NSString * const kCellReuseIdentifier = @"_ASCollectionViewCell"; return [_collectionNode tuningParametersForRangeType:rangeType]; } -// These deprecated methods harken back from a time where only one range type existed. -- (ASRangeTuningParameters)rangeTuningParameters +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - return [self tuningParametersForRangeType:ASLayoutRangeTypeDisplay]; + [_collectionNode setTuningParameters:tuningParameters forRangeMode:rangeMode rangeType:rangeType]; } -- (void)setRangeTuningParameters:(ASRangeTuningParameters)tuningParameters +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - [self setTuningParameters:tuningParameters forRangeType:ASLayoutRangeTypeDisplay]; + return [_collectionNode tuningParametersForRangeMode:rangeMode rangeType:rangeType]; } - (CGSize)calculatedSizeForNodeAtIndexPath:(NSIndexPath *)indexPath diff --git a/AsyncDisplayKit/ASTableView.h b/AsyncDisplayKit/ASTableView.h index 2a4d29b95a..bb7fa42062 100644 --- a/AsyncDisplayKit/ASTableView.h +++ b/AsyncDisplayKit/ASTableView.h @@ -56,25 +56,53 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithFrame:(CGRect)frame style:(UITableViewStyle)style asyncDataFetching:(BOOL)asyncDataFetchingEnabled; /** - * Tuning parameters for a range. + * Tuning parameters for a range type in full mode. * - * @param rangeType The range to get the tuning parameters for. + * @param rangeType The range type to get the tuning parameters for. * - * @returns A tuning parameter value for the given range. + * @returns A tuning parameter value for the given range type in full mode. * - * Defaults to the render range having one sceenful both leading and trailing and the preload range having two - * screenfuls in both directions. + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType; /** - * Set the tuning parameters for a range. + * Set the tuning parameters for a range type in full mode. * - * @param tuningParameters The tuning parameters to store for a range. - * @param rangeType The range to set the tuning parameters for. + * @param tuningParameters The tuning parameters to store for a range type. + * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType */ - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType; +/** + * Tuning parameters for a range type in the specified mode. + * + * @param rangeMode The range mode to get the runing parameters for. + * @param rangeType The range type to get the tuning parameters for. + * + * @returns A tuning parameter value for the given range type in the given mode. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + +/** + * Set the tuning parameters for a range type in the specigied mode. + * + * @param tuningParameters The tuning parameters to store for a range type. + * @param rangeMode The range mode to set the runing parameters for. + * @param rangeType The range type to set the tuning parameters for. + * + * @see ASLayoutRangeMode + * @see ASLayoutRangeType + */ +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + /** * The number of screens left to scroll before the delegate -tableView:beginBatchFetchingWithContext: is called. * diff --git a/AsyncDisplayKit/ASTableView.mm b/AsyncDisplayKit/ASTableView.mm index 3f2bfb1990..a327f7a945 100644 --- a/AsyncDisplayKit/ASTableView.mm +++ b/AsyncDisplayKit/ASTableView.mm @@ -320,22 +320,22 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell"; - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType { - [_layoutController setTuningParameters:tuningParameters forRangeType:rangeType]; + [_layoutController setTuningParameters:tuningParameters forRangeMode:ASLayoutRangeModeFull rangeType:rangeType]; } - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType { - return [_layoutController tuningParametersForRangeType:rangeType]; + return [_layoutController tuningParametersForRangeMode:ASLayoutRangeModeFull rangeType:rangeType]; } -- (ASRangeTuningParameters)rangeTuningParameters +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - return [self tuningParametersForRangeType:ASLayoutRangeTypeDisplay]; + [_layoutController setTuningParameters:tuningParameters forRangeMode:rangeMode rangeType:rangeType]; } -- (void)setRangeTuningParameters:(ASRangeTuningParameters)tuningParameters +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - [self setTuningParameters:tuningParameters forRangeType:ASLayoutRangeTypeDisplay]; + return [_layoutController tuningParametersForRangeMode:rangeMode rangeType:rangeType]; } - (NSArray *> *)completedNodes diff --git a/AsyncDisplayKit/Details/ASLayoutController.h b/AsyncDisplayKit/Details/ASLayoutController.h index cdf205dbe9..92a2f680d2 100644 --- a/AsyncDisplayKit/Details/ASLayoutController.h +++ b/AsyncDisplayKit/Details/ASLayoutController.h @@ -16,12 +16,6 @@ NS_ASSUME_NONNULL_BEGIN @class ASCellNode; -typedef NS_ENUM(NSUInteger, ASLayoutRangeMode) { - ASLayoutRangeModeMinimum = 0, - ASLayoutRangeModeFull, - ASLayoutRangeModeCount -}; - typedef struct { CGFloat leadingBufferScreenfuls; CGFloat trailingBufferScreenfuls; @@ -29,22 +23,6 @@ typedef struct { @protocol ASLayoutController -/** - * Tuning parameters for the range type in full mode. This method is deprecated. - * Instead, use -setTuningParameters:forRangeMode:rangeType: - * - * @see setTuningParameters:forRangeMode:rangeType: - */ -- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType ASDISPLAYNODE_DEPRECATED; - -/** - * Get tuning parameters for the range type in full mode. This method is deprecated. - * Instead, use -tuningParametersForRangeMode:rangeType: - * - * @see tuningParametersForRangeMode:rangeType: - */ -- (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType ASDISPLAYNODE_DEPRECATED; - - (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; - (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; diff --git a/AsyncDisplayKit/Details/ASLayoutRangeType.h b/AsyncDisplayKit/Details/ASLayoutRangeType.h index d25817d962..33391f0cb3 100644 --- a/AsyncDisplayKit/Details/ASLayoutRangeType.h +++ b/AsyncDisplayKit/Details/ASLayoutRangeType.h @@ -8,6 +8,21 @@ #import +/// Each mode has a complete set of tuning parameters for range types. +/// Depends on some conditions (including interface state and direction of the scroll view, state of rendering engine, etc), +/// a range controller can choose which mode it should use at a given time. +typedef NS_ENUM(NSUInteger, ASLayoutRangeMode) { + /// Minimum mode is used when a range controller should limit the amount of work it performs. + /// Thus, less views/layers are created and less data is fetched. + /// Range controller can automatically switch to full mode when conditions changed. + ASLayoutRangeModeMinimum = 0, + /// Normal/Full mode that a range controller uses to provide the best experience for end users. + /// This mode is usually used for an active scroll view. + /// A range controller under this requires more resources compare to minimum mode. + ASLayoutRangeModeFull, + ASLayoutRangeModeCount +}; + typedef NS_ENUM(NSInteger, ASLayoutRangeType) { ASLayoutRangeTypeVisible = 0, ASLayoutRangeTypeDisplay, diff --git a/AsyncDisplayKit/Details/ASRangeController.h b/AsyncDisplayKit/Details/ASRangeController.h index 74061f8806..6a4fde0b23 100644 --- a/AsyncDisplayKit/Details/ASRangeController.h +++ b/AsyncDisplayKit/Details/ASRangeController.h @@ -53,8 +53,9 @@ NS_ASSUME_NONNULL_BEGIN */ - (void)configureContentView:(UIView *)contentView forCellNode:(ASCellNode *)node; -- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType; -- (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType; +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; + +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType; /** * An object that describes the layout behavior of the ranged component (table view, collection view, etc.) diff --git a/AsyncDisplayKit/Details/ASRangeController.mm b/AsyncDisplayKit/Details/ASRangeController.mm index b728916a62..8e9c56cf1d 100644 --- a/AsyncDisplayKit/Details/ASRangeController.mm +++ b/AsyncDisplayKit/Details/ASRangeController.mm @@ -28,14 +28,14 @@ { } -- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType +- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - [_layoutController setTuningParameters:tuningParameters forRangeType:rangeType]; + [_layoutController setTuningParameters:tuningParameters forRangeMode:rangeMode rangeType:rangeType]; } -- (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType +- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType { - return [_layoutController tuningParametersForRangeType:rangeType]; + return [_layoutController tuningParametersForRangeMode:rangeMode rangeType:rangeType]; } @end