Prevent UITableView insertion/deletion animations by default

Fixes #292
This commit is contained in:
Levi McCallum
2015-05-07 21:53:38 -07:00
parent f248dbddd1
commit 1530ef2841
2 changed files with 23 additions and 6 deletions

View File

@@ -15,7 +15,7 @@
#import "ASDisplayNodeInternal.h"
#import "ASBatchFetching.h"
const static NSUInteger kASCollectionViewAnimationNone = 0;
const static NSUInteger kASCollectionViewAnimationNone = UITableViewRowAnimationNone;
#pragma mark -

View File

@@ -126,6 +126,16 @@ static BOOL _isInterceptedSelector(SEL sel)
@implementation ASTableView
void ASPerformBlockWithoutAnimation(BOOL withoutAnimation, void (^block)()) {
if (withoutAnimation) {
[UIView setAnimationsEnabled:NO];
block();
[UIView setAnimationsEnabled:YES];
} else {
block();
}
}
#pragma mark -
#pragma mark Lifecycle
@@ -467,29 +477,36 @@ static BOOL _isInterceptedSelector(SEL sel)
- (void)rangeController:(ASRangeController *)rangeController didInsertNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption
{
ASDisplayNodeAssertMainThread();
[super insertRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption];
ASPerformBlockWithoutAnimation(animationOption == UITableViewRowAnimationNone, ^{
[super insertRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption];
});
}
- (void)rangeController:(ASRangeController *)rangeController didDeleteNodesAtIndexPaths:(NSArray *)indexPaths withAnimationOption:(ASDataControllerAnimationOptions)animationOption
{
ASDisplayNodeAssertMainThread();
[super deleteRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption];
ASPerformBlockWithoutAnimation(animationOption == UITableViewRowAnimationNone, ^{
[super deleteRowsAtIndexPaths:indexPaths withRowAnimation:(UITableViewRowAnimation)animationOption];
});
}
- (void)rangeController:(ASRangeController *)rangeController didInsertSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption
{
ASDisplayNodeAssertMainThread();
[super insertSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption];
ASPerformBlockWithoutAnimation(animationOption == UITableViewRowAnimationNone, ^{
[super insertSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption];
});
}
- (void)rangeController:(ASRangeController *)rangeController didDeleteSectionsAtIndexSet:(NSIndexSet *)indexSet withAnimationOption:(ASDataControllerAnimationOptions)animationOption
{
ASDisplayNodeAssertMainThread();
[super deleteSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption];
ASPerformBlockWithoutAnimation(animationOption == UITableViewRowAnimationNone, ^{
[super deleteSections:indexSet withRowAnimation:(UITableViewRowAnimation)animationOption];
});
}
#pragma mark - ASDataControllerDelegate