From 582bca93cbf173aaffee11b8b5e35c881d0bde9d Mon Sep 17 00:00:00 2001 From: Heberti Almeida Date: Mon, 10 Apr 2017 12:35:44 -0400 Subject: [PATCH] Fix failing batch fetch in some cases. (#3242) * Fixed failed batch fetch caused by _deceleratingVelocity * Fixed indentation --- Source/ASCollectionView.mm | 11 +++++++++++ Source/ASTableView.mm | 11 +++++++++++ Source/Details/ASDelegateProxy.m | 4 +++- 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/Source/ASCollectionView.mm b/Source/ASCollectionView.mm index b968261f5d..205bdfcadf 100644 --- a/Source/ASCollectionView.mm +++ b/Source/ASCollectionView.mm @@ -145,6 +145,7 @@ static NSString * const kReuseIdentifier = @"_ASCollectionReuseIdentifier"; unsigned int scrollViewWillBeginDragging:1; unsigned int scrollViewDidEndDragging:1; unsigned int scrollViewWillEndDragging:1; + unsigned int scrollViewDidEndDecelerating:1; unsigned int collectionViewWillDisplayNodeForItem:1; unsigned int collectionViewWillDisplayNodeForItemDeprecated:1; unsigned int collectionViewDidEndDisplayingNodeForItem:1; @@ -481,6 +482,7 @@ static NSString * const kReuseIdentifier = @"_ASCollectionReuseIdentifier"; _asyncDelegateFlags.scrollViewDidScroll = [_asyncDelegate respondsToSelector:@selector(scrollViewDidScroll:)]; _asyncDelegateFlags.scrollViewWillEndDragging = [_asyncDelegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]; + _asyncDelegateFlags.scrollViewDidEndDecelerating = [_asyncDelegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]; _asyncDelegateFlags.scrollViewWillBeginDragging = [_asyncDelegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]; _asyncDelegateFlags.scrollViewDidEndDragging = [_asyncDelegate respondsToSelector:@selector(scrollViewDidEndDragging:willDecelerate:)]; _asyncDelegateFlags.collectionViewWillDisplayNodeForItem = [_asyncDelegate respondsToSelector:@selector(collectionView:willDisplayNode:forItemAtIndexPath:)]; @@ -1318,6 +1320,15 @@ static NSString * const kReuseIdentifier = @"_ASCollectionReuseIdentifier"; } } +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView +{ + _deceleratingVelocity = CGPointZero; + + if (_asyncDelegateFlags.scrollViewDidEndDecelerating) { + [_asyncDelegate scrollViewDidEndDecelerating:scrollView]; + } +} + - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { for (_ASCollectionViewCell *collectionCell in _cellsForVisibilityUpdates) { diff --git a/Source/ASTableView.mm b/Source/ASTableView.mm index a4235b579e..b322eae61d 100644 --- a/Source/ASTableView.mm +++ b/Source/ASTableView.mm @@ -181,6 +181,7 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell"; unsigned int scrollViewWillBeginDragging:1; unsigned int scrollViewDidEndDragging:1; unsigned int scrollViewWillEndDragging:1; + unsigned int scrollViewDidEndDecelerating:1; unsigned int tableNodeWillDisplayNodeForRow:1; unsigned int tableViewWillDisplayNodeForRow:1; unsigned int tableViewWillDisplayNodeForRowDeprecated:1; @@ -431,6 +432,7 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell"; _asyncDelegateFlags.tableViewDidEndDisplayingNodeForRow = [_asyncDelegate respondsToSelector:@selector(tableView:didEndDisplayingNode:forRowAtIndexPath:)]; _asyncDelegateFlags.tableNodeDidEndDisplayingNodeForRow = [_asyncDelegate respondsToSelector:@selector(tableNode:didEndDisplayingRowWithNode:)]; _asyncDelegateFlags.scrollViewWillEndDragging = [_asyncDelegate respondsToSelector:@selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:)]; + _asyncDelegateFlags.scrollViewDidEndDecelerating = [_asyncDelegate respondsToSelector:@selector(scrollViewDidEndDecelerating:)]; _asyncDelegateFlags.tableViewWillBeginBatchFetch = [_asyncDelegate respondsToSelector:@selector(tableView:willBeginBatchFetchWithContext:)]; _asyncDelegateFlags.tableNodeWillBeginBatchFetch = [_asyncDelegate respondsToSelector:@selector(tableNode:willBeginBatchFetchWithContext:)]; _asyncDelegateFlags.shouldBatchFetchForTableView = [_asyncDelegate respondsToSelector:@selector(shouldBatchFetchForTableView:)]; @@ -1199,6 +1201,15 @@ static NSString * const kCellReuseIdentifier = @"_ASTableViewCell"; } } +- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView +{ + _deceleratingVelocity = CGPointZero; + + if (_asyncDelegateFlags.scrollViewDidEndDecelerating) { + [_asyncDelegate scrollViewDidEndDecelerating:scrollView]; + } +} + - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { for (_ASTableViewCell *tableViewCell in _cellsForVisibilityUpdates) { diff --git a/Source/Details/ASDelegateProxy.m b/Source/Details/ASDelegateProxy.m index acd0c5349a..94f113a72d 100644 --- a/Source/Details/ASDelegateProxy.m +++ b/Source/Details/ASDelegateProxy.m @@ -54,7 +54,8 @@ selector == @selector(tableView:didEndDisplayingCell:forRowAtIndexPath:) || // used for batch fetching API - selector == @selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:) + selector == @selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:) || + selector == @selector(scrollViewDidEndDecelerating:) ); } @@ -96,6 +97,7 @@ // used for batch fetching API selector == @selector(scrollViewWillEndDragging:withVelocity:targetContentOffset:) || + selector == @selector(scrollViewDidEndDecelerating:) || // used for ASCellNode visibility selector == @selector(scrollViewDidScroll:) ||