iOS_UITableView上拉加载,下拉刷新
2015-07-18 17:01
381 查看
转自:http://blog.csdn.net/hmt20130412/article/details/32695305
很多App中,新闻或者展示类都存在下拉刷新和上拉加载的效果,网上提供了实现这种效果的第三方类(详情请见MJRefresh和EGOTableViewPullRefresh),用起来很方便,但是闲暇之余,我们可以思考下,这种效果实现的原理是什么,我以前说过,只要是动画都是骗人的,只要不是硬件问题大部分效果都能在系统UI的基础上做出来.
@下面是关键代码分析:
很多App中,新闻或者展示类都存在下拉刷新和上拉加载的效果,网上提供了实现这种效果的第三方类(详情请见MJRefresh和EGOTableViewPullRefresh),用起来很方便,但是闲暇之余,我们可以思考下,这种效果实现的原理是什么,我以前说过,只要是动画都是骗人的,只要不是硬件问题大部分效果都能在系统UI的基础上做出来.
@下面是关键代码分析:
// 下拉刷新的原理 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView { if (scrollView.contentOffset.y < - 100) { [UIView animateWithDuration:1.0 animations:^{ // frame发生偏移,距离顶部150的距离(可自行设定) self.tableView.contentInset = UIEdgeInsetsMake(150.0f, 0.0f, 0.0f, 0.0f); } completion:^(BOOL finished) { /** * 发起网络请求,请求刷新数据 */ }]; } } // 上拉加载的原理 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate { NSLog(@"%f",scrollView.contentOffset.y); NSLog(@"%f",scrollView.frame.size.height); NSLog(@"%f",scrollView.contentSize.height); /** * 关键--> * scrollView一开始并不存在偏移量,但是会设定contentSize的大小,所以contentSize.height永远都会比contentOffset.y高一个手机屏幕的 * 高度;上拉加载的效果就是每次滑动到底部时,再往上拉的时候请求更多,那个时候产生的偏移量,就能让contentOffset.y + 手机屏幕尺寸高大于这 * 个滚动视图的contentSize.height */ if (scrollView.contentOffset.y + scrollView.frame.size.height >= scrollView.contentSize.height) { NSLog(@"%d %s",__LINE__,__FUNCTION__); [UIView commitAnimations]; [UIView animateWithDuration:1.0 animations:^{ // frame发生的偏移量,距离底部往上提高60(可自行设定) self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 60, 0); } completion:^(BOOL finished) { /** * 发起网络请求,请求加载更多数据 * 然后在数据请求回来的时候,将contentInset改为(0,0,0,0) */ }]; } }
相关文章推荐
- hdu 1159 Common Subsequence (dp乞讨LCS)
- requestWindowFeature的使用
- 使用CamlBuilder生成CAML查询语句
- Number Sequence(HDU1005)
- POJ3061 Subsequence(二进制前缀和法律+仿真足)
- SCOM 2012R2 (1) PREREQUISITES
- CALayer(Transform)旋转后产生锯齿
- iptable中snat和masquerade的区别
- find_local_deformable_model_three_squirrel.hdev代码尝试修改
- 反汇编uimage和查看符号表的方法
- Unique Paths II
- 微软首测Win10即服务 Build 10240接收专属更新包下载安装
- ueditor 定制工具栏图标
- EASYUI- EASYUI左移右移 GRID中值
- java基础知识—String、StringBuffer和StringBuilder
- Android开发UI之去掉title bar
- Jenkins build失败条件
- setuid seteuid setreuid 三个函数讲解
- NGUI学习笔记(五):缓动
- UVA 10735 Euler Circuit 混合图的欧拉回路(最大流,fluery算法)