Add rangeMode APIs

This commit is contained in:
Huy Nguyen
2016-02-02 11:58:18 -08:00
parent 69e674c1c8
commit 19335d8c9e
10 changed files with 146 additions and 59 deletions

View File

@@ -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.
*

View File

@@ -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

View File

@@ -52,25 +52,53 @@ NS_ASSUME_NONNULL_BEGIN
@property (nonatomic, weak) id<ASCollectionDataSource> 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.
*

View File

@@ -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

View File

@@ -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.
*

View File

@@ -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<NSArray <ASCellNode *> *> *)completedNodes

View File

@@ -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 <NSObject>
/**
* 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;

View File

@@ -8,6 +8,21 @@
#import <Foundation/Foundation.h>
/// 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,

View File

@@ -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.)

View File

@@ -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