From a7df20d1201be1859342af02bb855191c6eea674 Mon Sep 17 00:00:00 2001 From: Huy Nguyen Date: Thu, 4 Feb 2016 16:51:21 -0800 Subject: [PATCH] Update range mode selection logic in ASRangeControllerBeta --- AsyncDisplayKit/Details/ASLayoutRangeType.h | 2 ++ AsyncDisplayKit/Details/ASRangeControllerBeta.mm | 15 +++++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/AsyncDisplayKit/Details/ASLayoutRangeType.h b/AsyncDisplayKit/Details/ASLayoutRangeType.h index 7be3123533..aed3d98bb9 100644 --- a/AsyncDisplayKit/Details/ASLayoutRangeType.h +++ b/AsyncDisplayKit/Details/ASLayoutRangeType.h @@ -29,6 +29,8 @@ typedef NS_ENUM(NSUInteger, ASLayoutRangeMode) { ASLayoutRangeModeCount }; +#define ASLayoutRangeModeInvalid ASLayoutRangeModeCount + typedef NS_ENUM(NSInteger, ASLayoutRangeType) { ASLayoutRangeTypeDisplay, ASLayoutRangeTypeFetchData, diff --git a/AsyncDisplayKit/Details/ASRangeControllerBeta.mm b/AsyncDisplayKit/Details/ASRangeControllerBeta.mm index 3557e00446..82eb877917 100644 --- a/AsyncDisplayKit/Details/ASRangeControllerBeta.mm +++ b/AsyncDisplayKit/Details/ASRangeControllerBeta.mm @@ -41,7 +41,7 @@ } _rangeIsValid = YES; - _currentRangeMode = ASLayoutRangeModeCount; + _currentRangeMode = ASLayoutRangeModeInvalid; return self; } @@ -56,19 +56,15 @@ #pragma mark - Core visible node range managment API + (ASLayoutRangeMode)rangeModeForInterfaceState:(ASInterfaceState)interfaceState - scrollDirection:(ASScrollDirection)scrollDirection currentRangeMode:(ASLayoutRangeMode)currentRangeMode { BOOL isVisible = (ASInterfaceStateIncludesVisible(interfaceState)); - BOOL isScrolling = (scrollDirection != ASScrollDirectionNone); - BOOL isUsingMinimumRangeMode = (currentRangeMode == ASLayoutRangeModeMinimum); - // If we are already visible and scrolling, get busy! Better get started on preloading before the user scrolls more... - // If we are already visible and finished displaying minimum mode, extend to full mode - if (isVisible && (isScrolling || isUsingMinimumRangeMode)) { - return ASLayoutRangeModeFull; + BOOL isFirstRangeUpdate = (currentRangeMode == ASLayoutRangeModeInvalid); + if (!isVisible || isFirstRangeUpdate) { + return ASLayoutRangeModeMinimum; } - return ASLayoutRangeModeMinimum; + return ASLayoutRangeModeFull; } - (void)visibleNodeIndexPathsDidChangeWithScrollDirection:(ASScrollDirection)scrollDirection @@ -282,7 +278,6 @@ { if (!_didRegisterForNotifications) { ASLayoutRangeMode nextRangeMode = [ASRangeControllerBeta rangeModeForInterfaceState:interfaceState - scrollDirection:_scrollDirection currentRangeMode:_currentRangeMode]; if (_currentRangeMode != nextRangeMode) { [[NSNotificationCenter defaultCenter] addObserver:self