【开源框架EGOTableViewPullRefresh的研究】

EGOTableViewPullRefresh:点击打开链接https://github.com/enormego/EGOTableViewPullRefresh

RootViewController.m中的

//EGORefreshTableHeaderView *view接到tableview的上面,所以坐标是(0-460320460),这样下拉出来的就是EGORefreshTableHeaderView *view的内容

EGORefreshTableHeaderView *view = [[EGORefreshTableHeaderViewalloc]initWithFrame:CGRectMake(0.0f,0-self.tableView.bounds.size.height,self.view.frame.size.width,self.tableView.bounds.size.height)];

整个下拉刷新的过程:

 

初始化设置,上面的标签显示刷新的状态,下面的标签显示更新时间,箭头和滚动的圆圈(UIActivityIndicatorView),并把状态设置为正常EGOOPullRefreshNormal

开始拖动

把状态设置为正在下拉 EGOOPullRefreshPulling

结束拖动

触发刷新

     表视图重新加载数据

设置正在加载状态

scrollview的contentInset属性增加滚动区域上方60点

     表视图数据加载完成

          scrollview的contentInset属性增加滚动区域上方0点

          设置正常状态


在下面这个委托里,一定要用线程的方法执行doneLoadingTableViewData,不然的话就会出现下拉出来的就不会再缩回去了,而且圆圈一直在转。

 

- (void)egoRefreshTableHeaderDidTriggerRefresh:(EGORefreshTableHeaderView*)view{

NSLog(@"egoRefreshTableHeaderDidTriggerRefresh");

[selfreloadTableViewDataSource];

[selfperformSelector:@selector(doneLoadingTableViewData)withObject:nil afterDelay:3.0];

    //如果让上面的方法立即执行,下拉出来的就不会再缩回去了,而且圆圈一直在转。这时,它最终转到了 - (void)egoRefreshScrollViewDidScroll:(UIScrollView *)scrollView中的 scrollView.contentInset = UIEdgeInsetsMake(offset, 0.0f, 0.0f, 0.0f);这一行代码,所以圆圈缩不回去,把offset改为0就缩回去了

//     [self doneLoadingTableViewData];

}


多线程执行过程:

 

结束拖动

触发刷新

     表视图重新加载数据

设置正在加载状态

scrollview的contentInset属性增加滚动区域上方60点

     表视图数据加载完成

          scrollview的contentInset属性增加滚动区域上方0点

          设置正常状态



多线程:[self performSelector:@selector(doneLoadingTableViewData) withObject:nil afterDelay:3.0];

egoRefreshScrollViewDidEndDragging

egoRefreshTableHeaderDidTriggerRefresh

reloadTableViewDataSource

[self setState:EGOOPullRefreshLoading];

[_activityViewstartAnimating]

scrollView.contentInset = UIEdgeInsetsMake(60.0f0.0f,0.0f0.0f);

NSLog(@"_state == EGOOPullRefreshLoading)");

scrollView.contentInset = UIEdgeInsetsMake(offset, 0.0f0.0f,0.0f);

doneLoadingTableViewData

egoRefreshScrollViewDataSourceDidFinishedLoading

[scrollView setContentInset:UIEdgeInsetsMake(0.0f,0.0f0.0f,0.0f)];

[self setState:EGOOPullRefreshNormal];


 

立即执行,不用线程的方法执行过程如下:

结束拖动

触发刷新

     表视图重新加载数据

     表视图数据加载完成

          scrollview的contentInset属性增加滚动区域上方0点

          设置正常状态

设置正在加载状态

scrollview的contentInset属性增加滚动区域上方60点



立即执行:[self doneLoadingTableViewData];

egoRefreshScrollViewDidEndDragging

egoRefreshTableHeaderDidTriggerRefresh

reloadTableViewDataSource

doneLoadingTableViewData

egoRefreshScrollViewDataSourceDidFinishedLoading

[scrollView setContentInset:UIEdgeInsetsMake(0.0f,0.0f0.0f,0.0f)];

[selfsetState:EGOOPullRefreshNormal];

[self setState:EGOOPullRefreshLoading];

scrollView.contentInset = UIEdgeInsetsMake(60.0f0.0f,0.0f0.0f);

[_activityViewstartAnimating];

scrollView.contentInset = UIEdgeInsetsMake(offset, 0.0f0.0f,0.0f);


原文地址:https://www.cnblogs.com/riskyer/p/3263259.html