diff --git a/AsyncDisplayKit/ASDisplayNode+Subclasses.h b/AsyncDisplayKit/ASDisplayNode+Subclasses.h index 96fe28bf5f..cba7216192 100644 --- a/AsyncDisplayKit/ASDisplayNode+Subclasses.h +++ b/AsyncDisplayKit/ASDisplayNode+Subclasses.h @@ -243,32 +243,22 @@ NS_ASSUME_NONNULL_BEGIN - (void)visibilityDidChange:(BOOL)isVisible ASDISPLAYNODE_REQUIRES_SUPER; /** - * @abstract Called whenever the the node enters the display range. + * @abstract Called whenever the the node has entered or left the display state. * - * @discussion Subclasses may use this to monitor when they enter the display range. + * @discussion Subclasses may use this to monitor when a node should be rendering its content. + * + * @note This method can be called from any thread and should therefore be thread safe. */ -- (void)didEnterDisplayRange ASDISPLAYNODE_REQUIRES_SUPER; +- (void)displayStateDidChange:(BOOL)inDisplayState ASDISPLAYNODE_REQUIRES_SUPER; /** - * @abstract Called whenever the the node exits the display range. + * @abstract Called whenever the the node has entered or left the load state. * - * @discussion Subclasses may use this to monitor when they exit the display range. - */ -- (void)didExitDisplayRange ASDISPLAYNODE_REQUIRES_SUPER; - -/** - * @abstract Called whenever the the node enters the fetch data range. + * @discussion Subclasses may use this to monitor data for a node should be loaded, either from a local or remote source. * - * @discussion Subclasses may use this to monitor when they enter the fetch data range. + * @note This method can be called from any thread and should therefore be thread safe. */ -- (void)didEnterFetchDataRange ASDISPLAYNODE_REQUIRES_SUPER; - -/** - * @abstract Called whenever the the node exits the fetch data range. - * - * @discussion Subclasses may use this to monitor when they exit the fetch data range. - */ -- (void)didExitFetchDataRange ASDISPLAYNODE_REQUIRES_SUPER; +- (void)loadStateDidChange:(BOOL)inLoadState ASDISPLAYNODE_REQUIRES_SUPER; /** * Called just before the view is added to a window. diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index d40a466573..2edbf7ec15 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -2178,22 +2178,12 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) // subclass override } -- (void)didEnterDisplayRange +- (void)displayStateDidChange:(BOOL)inDisplayState { //subclass override } -- (void)didExitDisplayRange -{ - //subclass override -} - -- (void)didEnterFetchDataRange -{ - //subclass override -} - -- (void)didExitFetchDataRange +- (void)loadStateDidChange:(BOOL)inLoadState { //subclass override } @@ -2242,12 +2232,12 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) if (nowFetchData != wasFetchData) { if (nowFetchData) { [self fetchData]; - [self didEnterFetchDataRange]; + [self loadStateDidChange:YES]; } else { if ([self supportsRangeManagedInterfaceState]) { [self clearFetchedData]; } - [self didExitFetchDataRange]; + [self loadStateDidChange:NO]; } } @@ -2293,9 +2283,9 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) } if (nowDisplay) { - [self didEnterDisplayRange]; + [self displayStateDidChange:YES]; } else { - [self didExitDisplayRange]; + [self displayStateDidChange:NO]; } } diff --git a/AsyncDisplayKitTests/ASDisplayNodeTests.m b/AsyncDisplayKitTests/ASDisplayNodeTests.m index 5ce3553215..c6c8ec8903 100644 --- a/AsyncDisplayKitTests/ASDisplayNodeTests.m +++ b/AsyncDisplayKitTests/ASDisplayNodeTests.m @@ -87,11 +87,11 @@ for (ASDisplayNode *n in @[ nodes ]) {\ @property (atomic, copy) CGSize(^calculateSizeBlock)(ASTestDisplayNode *node, CGSize size); @property (atomic) BOOL hasFetchedData; -@property (atomic) BOOL didCallEnterDisplayRange; -@property (atomic) BOOL didCallExitDisplayRange; +@property (atomic) BOOL displayRangeStateChangedToYES; +@property (atomic) BOOL displayRangeStateChangedToNO; -@property (atomic) BOOL didCallEnterFetchDataRange; -@property (atomic) BOOL didCallExitFetchDataRange; +@property (atomic) BOOL loadStateChangedToYES; +@property (atomic) BOOL loadStateChangedToNO; @end @interface ASTestResponderNode : ASTestDisplayNode @@ -116,28 +116,26 @@ for (ASDisplayNode *n in @[ nodes ]) {\ self.hasFetchedData = NO; } -- (void)didEnterDisplayRange +- (void)displayStateDidChange:(BOOL)inDisplayState { - [super didEnterDisplayRange]; - self.didCallEnterDisplayRange = YES; + [super displayStateDidChange:inDisplayState]; + + if (inDisplayState) { + self.displayRangeStateChangedToYES = YES; + } else { + self.displayRangeStateChangedToNO = YES; + } } -- (void)didExitDisplayRange +- (void)loadStateDidChange:(BOOL)inLoadState { - [super didExitDisplayRange]; - self.didCallExitDisplayRange = YES; -} - -- (void)didEnterFetchDataRange -{ - [super didEnterFetchDataRange]; - self.didCallEnterFetchDataRange = YES; -} - -- (void)didExitFetchDataRange -{ - [super didExitFetchDataRange]; - self.didCallExitFetchDataRange = YES; + [super loadStateDidChange:inLoadState]; + + if (inLoadState) { + self.loadStateChangedToYES = YES; + } else { + self.loadStateChangedToNO = YES; + } } - (void)dealloc @@ -1914,7 +1912,7 @@ static bool stringContainsPointer(NSString *description, const void *p) { [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; - XCTAssert([node didCallEnterDisplayRange]); + XCTAssert([node displayRangeStateChangedToYES]); } - (void)testDidExitDisplayIsCalledWhenNodesExitDisplayRange @@ -1924,7 +1922,7 @@ static bool stringContainsPointer(NSString *description, const void *p) { [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; [node recursivelySetInterfaceState:ASInterfaceStateFetchData]; - XCTAssert([node didCallExitDisplayRange]); + XCTAssert([node displayRangeStateChangedToNO]); } - (void)testDidEnterFetchDataIsCalledWhenNodesEnterFetchDataRange @@ -1933,7 +1931,7 @@ static bool stringContainsPointer(NSString *description, const void *p) { [node recursivelySetInterfaceState:ASInterfaceStateFetchData]; - XCTAssert([node didCallEnterFetchDataRange]); + XCTAssert([node loadStateChangedToYES]); } - (void)testDidExitFetchDataIsCalledWhenNodesExitFetchDataRange @@ -1943,7 +1941,7 @@ static bool stringContainsPointer(NSString *description, const void *p) { [node recursivelySetInterfaceState:ASInterfaceStateFetchData]; [node recursivelySetInterfaceState:ASInterfaceStateDisplay]; - XCTAssert([node didCallExitFetchDataRange]); + XCTAssert([node loadStateChangedToNO]); } @end