Skip to content
This repository was archived by the owner on Feb 2, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 33 additions & 5 deletions AsyncDisplayKit/ASCollectionNode.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
14 changes: 12 additions & 2 deletions AsyncDisplayKit/ASCollectionNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,22 @@ - (void)endUpdatesAnimated:(BOOL)animated

- (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
Expand Down
38 changes: 33 additions & 5 deletions AsyncDisplayKit/ASCollectionView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
9 changes: 4 additions & 5 deletions AsyncDisplayKit/ASCollectionView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -347,15 +347,14 @@ - (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)range
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
Expand Down
3 changes: 3 additions & 0 deletions AsyncDisplayKit/ASDisplayNode.mm
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
#import "ASCellNode.h"

NSInteger const ASDefaultDrawingPriority = ASDefaultTransactionPriority;
NSString * const ASRenderingEngineDidDisplayScheduledNodesNotification = @"ASRenderingEngineDidDisplayScheduledNodes";

@interface _ASDisplayNodePosition : NSObject

Expand Down Expand Up @@ -279,6 +280,8 @@ + (void)scheduleNodeForRecursiveDisplay:(ASDisplayNode *)node
for (ASDisplayNode *node in displayingNodes) {
[node __recursivelyTriggerDisplayAndBlock:NO];
}
[[NSNotificationCenter defaultCenter] postNotificationName:ASRenderingEngineDidDisplayScheduledNodesNotification
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need away to check if a specific node is in the set that displayed? Maybe we can actually pass the displaying nodes object as the object, and any listeners can check for contains object?

object:nil];
});
}
}
Expand Down
44 changes: 36 additions & 8 deletions AsyncDisplayKit/ASTableView.h
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down
12 changes: 6 additions & 6 deletions AsyncDisplayKit/ASTableView.mm
Original file line number Diff line number Diff line change
Expand Up @@ -320,22 +320,22 @@ - (void)reloadDataImmediately

- (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
Expand Down
66 changes: 30 additions & 36 deletions AsyncDisplayKit/Details/ASAbstractLayoutController.mm
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@
#include <vector>

@interface ASAbstractLayoutController () {
std::vector<ASRangeTuningParameters> _tuningParameters;
std::vector<ASRangeTuningParameters> _minimumTuningParameters;
std::vector<std::vector<ASRangeTuningParameters>> _tuningParameters;
CGSize _viewportSize;
}
@end
Expand All @@ -25,32 +24,32 @@ - (instancetype)init
return nil;
}

_tuningParameters = std::vector<ASRangeTuningParameters>(ASLayoutRangeTypeCount);
_tuningParameters[ASLayoutRangeTypeVisible] = {
_tuningParameters = std::vector<std::vector<ASRangeTuningParameters>> (ASLayoutRangeModeCount, std::vector<ASRangeTuningParameters> (ASLayoutRangeTypeCount));

_tuningParameters[ASLayoutRangeModeMinimum][ASLayoutRangeTypeVisible] = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it is time to remove the visible type from range parameters? This used to exist because the old range controller implementation had individual range handlers and it helped propagate the pattern, but now we can quite easily assuming that they are zero and make the appropriate call in the range controller. If you see any value to having them be explicit, feel free to keep them.

.leadingBufferScreenfuls = 0,
.trailingBufferScreenfuls = 0
};
_tuningParameters[ASLayoutRangeTypeDisplay] = {
.leadingBufferScreenfuls = 1.5,
.trailingBufferScreenfuls = 0.75
_tuningParameters[ASLayoutRangeModeMinimum][ASLayoutRangeTypeDisplay] = {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know that pager node has custom values for ranges, and we should probably have it set up appropriate minimum ranges as well.

.leadingBufferScreenfuls = 0.25,
.trailingBufferScreenfuls = 0.25
};
_tuningParameters[ASLayoutRangeTypeFetchData] = {
.leadingBufferScreenfuls = 3,
.trailingBufferScreenfuls = 2
_tuningParameters[ASLayoutRangeModeMinimum][ASLayoutRangeTypeFetchData] = {
.leadingBufferScreenfuls = 1,
.trailingBufferScreenfuls = 1
};

_minimumTuningParameters = std::vector<ASRangeTuningParameters>(ASLayoutRangeTypeCount);
_minimumTuningParameters[ASLayoutRangeTypeVisible] = {
_tuningParameters[ASLayoutRangeModeFull][ASLayoutRangeTypeVisible] = {
.leadingBufferScreenfuls = 0,
.trailingBufferScreenfuls = 0
};
_minimumTuningParameters[ASLayoutRangeTypeDisplay] = {
.leadingBufferScreenfuls = 0.25,
.trailingBufferScreenfuls = 0.25
_tuningParameters[ASLayoutRangeModeFull][ASLayoutRangeTypeDisplay] = {
.leadingBufferScreenfuls = 1.5,
.trailingBufferScreenfuls = 0.75
};
_minimumTuningParameters[ASLayoutRangeTypeFetchData] = {
.leadingBufferScreenfuls = 1,
.trailingBufferScreenfuls = 1
_tuningParameters[ASLayoutRangeModeFull][ASLayoutRangeTypeFetchData] = {
.leadingBufferScreenfuls = 3,
.trailingBufferScreenfuls = 2
};

return self;
Expand All @@ -60,33 +59,28 @@ - (instancetype)init

- (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType
{
ASDisplayNodeAssert(rangeType < _tuningParameters.size(), @"Requesting a range that is OOB for the configured tuning parameters");
return _tuningParameters[rangeType];
return [self tuningParametersForRangeMode:ASLayoutRangeModeFull rangeType:rangeType];
}

- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeType:(ASLayoutRangeType)rangeType
{
ASDisplayNodeAssert(rangeType < _tuningParameters.size(), @"Requesting a range that is OOB for the configured tuning parameters");
ASDisplayNodeAssert(rangeType != ASLayoutRangeTypeVisible, @"Must not set Visible range tuning parameters (always 0, 0)");
_tuningParameters[rangeType] = tuningParameters;
}

- (ASRangeTuningParameters)minimumTuningParametersForRangeType:(ASLayoutRangeType)rangeType
{
ASDisplayNodeAssert(rangeType < _minimumTuningParameters.size(), @"Requesting a range that is OOB for the configured minimum tuning parameters");
return _minimumTuningParameters[rangeType];
return [self setTuningParameters:tuningParameters forRangeMode:ASLayoutRangeModeFull rangeType:rangeType];
}

- (void)setMinimumTuningParameters:(ASRangeTuningParameters)minimumTuningParameters forRangeType:(ASLayoutRangeType)rangeType
- (ASRangeTuningParameters)tuningParametersForRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
{
ASDisplayNodeAssert(rangeType < _minimumTuningParameters.size(), @"Requesting a range that is OOB for the configured minimum tuning parameters");
ASDisplayNodeAssert(rangeType != ASLayoutRangeTypeVisible, @"Must not set Visible range minimum tuning parameters (always 0, 0)");
_minimumTuningParameters[rangeType] = minimumTuningParameters;
ASDisplayNodeAssert(rangeMode < _tuningParameters.size() && rangeType < _tuningParameters[rangeMode].size(),
@"Requesting a range that is OOB for the configured tuning parameters");
return _tuningParameters[rangeMode][rangeType];
}

- (ASRangeTuningParameters)tuningParametersForRangeType:(ASLayoutRangeType)rangeType isFullRange:(BOOL)isFullRange
- (void)setTuningParameters:(ASRangeTuningParameters)tuningParameters forRangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
{
return isFullRange ? [self tuningParametersForRangeType:rangeType] : [self minimumTuningParametersForRangeType:rangeType];
ASDisplayNodeAssert(rangeMode < _tuningParameters.size() && rangeType < _tuningParameters[rangeMode].size(),
@"Setting a range that is OOB for the configured tuning parameters");
ASDisplayNodeAssert(rangeType != ASLayoutRangeTypeVisible,
@"Must not set Visible range minimum tuning parameters (always 0, 0)");
_tuningParameters[rangeMode][rangeType] = tuningParameters;
}

#pragma mark - Abstract Index Path Range Support
Expand All @@ -98,7 +92,7 @@ - (BOOL)shouldUpdateForVisibleIndexPaths:(NSArray *)indexPaths rangeType:(ASLayo
return NO;
}

- (NSSet *)indexPathsForScrolling:(ASScrollDirection)scrollDirection rangeType:(ASLayoutRangeType)rangeType shouldUseFullRange:(BOOL)shouldUseFullRange
- (NSSet *)indexPathsForScrolling:(ASScrollDirection)scrollDirection rangeMode:(ASLayoutRangeMode)rangeMode rangeType:(ASLayoutRangeType)rangeType
{
ASDisplayNodeAssertNotSupported();
return nil;
Expand Down
Loading