以前做项目的时候没有注意,上拉加载直接往数组中添加新的数据,然后 reloadData,这样固然方便了,但是发现一个问题(以前一直没注意),就是你刷新的时候,会闪一下tableView,虽然没有什么影响,但是闪一下感觉还是怪怪的。后来经过研究大厂的app发现别人不会闪,而是直接在下面就出来了。显然。这样更加好看。
经过研究,发现一种叫做增量加载的方式,能够直接从下面加载,而不闪下。
先上老的代码(有问题的代码)。
- (void)loadMoreData {
//我的请求类,大家忽略
if (!_netManager) {
_netManager= [[NetWorkManage alloc] init];
}
//接口
NSString *serverUrl = @“XXXXXX”;
NSDictionary *paraDic = @{};
__weak typeof(self) weakSelf = self;
//请求方法
[_netManager postWorkWithURl:serverUrl param:paraDic success:^(id object) {
//请求的新的数据
NSArray *newsListArray = [object objectForKey:@"newsList"];
if (newsListArray.count > 0) {
for (NSDictionary *dic in newsListArray) {
//数据model
LiveOriginalEntity *e = [LiveOriginalEntity mj_objectWithKeyValues:dic];
[weakSelf.dataArr addObject:e];
}
//有新数据之后,直接刷新,这样虽然也是刷新的,但是整个tableview会闪一下,以及整个tabelview会刷新,所以对性能也不是很友好
[weakSelf.listTableView reloadData];
}
} fail:^(NSString *errorMessage) {
//请求失败
}];
}
-------------------------------------------------------------分割线-------------------------------------------------------------------------------
以下是 上拉加载之后,直接从下面划出数据的加载方法,不闪动,这才是关键
- (void)loadMoreData {
//我的请求类,大家忽略
if (!_netManager) {
_netManager= [[NetWorkManage alloc] init];
}
//接口
NSString *serverUrl = @“XXXXXX”;
NSDictionary *paraDic = @{};
__weak typeof(self) weakSelf = self;
//请求方法
[_netManager postWorkWithURl:serverUrl param:paraDic success:^(id object) {
//请求的新的数据
//以下是单个分区,上拉加载(一个分区里面上拉加载更多)
NSArray *newsListArray = [object objectForKey:@"newsList"];
if (newsListArray.count > 0) {
NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:0]; //创建一个临时数组
for (NSDictionary *dic in newsListArray) {
//数据model
LiveOriginalEntity *e = [LiveOriginalEntity mj_objectWithKeyValues:dic];
[tempArray addObject:e];
[weakSelf.dataArr addObject:e];
}
NSMutableArray *insertInexPaths = [NSMutableArray arrayWithCapacity:[tempArray count]]; //创建一个临时数据存放indexpath
for (NSInteger i = 0; i< tempArray.count; i++) {
// 取出后面需要加入的indexPath放进刚刚的那个临时数组
NSIndexPath *newPath = [NSIndexPath indexPathForRow:[weakSelf.dataArr indexOfObject:[tempArray objectAtIndex:i]] inSection:0];
[insertInexPaths addObject:newPath];
}
//把新的数据插入到后面
[weakSelf.listTableView insertRowsAtIndexPaths:insertInexPaths withRowAnimation:(UITableViewRowAnimationFade)];
}
//如果是上拉加载更多分区,上拉加载(插入更多的分区)则使用以下代码
if (newsListArray.count > 0) {
NSMutableArray *tempArray = [NSMutableArray array];
NSInteger beforeCount = weakSelf.dataArr.count;
for (NSInteger i = 0; i< listArr.count; i++) {
NSDictionary *contentDic = [newsListArray objectAtIndex:i];
RecommandEnity *e = [RecommandEnity mj_objectWithKeyValues:contentDic];
[tempArray addObject:e];
[weakSelf.dataArr addObject:e];
}
// 插入分区
[weakSelf.listTableView insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(beforeCount, tempArray.count)] withRowAnimation:UITableViewRowAnimationFade];
// [weakSelf.listTableView reloadData];
}
} fail:^(NSString *errorMessage) {
//请求失败
}];
}
如有不当之处,请多多指教。谢谢!
网友评论