原文作者:冥冥之中
最近看到有不少人问,像Twitter,Sina微博等这些iPhone客户端下拉刷新是怎么实现的,所以花了点时间整理一个例子给大家参考一下。
能够下拉说明他首先得是个UIScrollView,因为只有他才有那些Drag事件。在参考一些开源代码的基础上,整理的大致思路如下:
一)在UIScrollView的顶部添加一个头部视图,用来显示旋转指针、描述文字和更新时间等。设计这个视图不难,但怎么添加顶部去呢,而且没有下拉 的情况下是看不到的。简单,只要把这个头部视图的frame的y坐标设置为负数就可以,比如为CGRectMake(0, -60, 320, 60),然后调用UIScrollView的addSubview方法,这就把放到顶部宽320px、高60px的地方了。当UIScrollView往 下拖动60px,头部视图就完全展现,松开后就又缩回去了。
二)其实明白了一)的道理,就可以自己做个实现了,但我还是把话说完吧。这一步需要设置UIScrollView的delegate,所以需要实现 UIScrollViewDelegate。UIScrollViewDelegate实现里面主要处理下面几个事 件:1)scrollViewDidScroll,当拖动时发生,在这里加上更改头部视图状态的操作,比如更新描述文字,更改箭头方向 等;2)scrollViewDidEndDragging,当停止拖动时发生。这里就可以写调用远程接口的代码了(注意最好是异步方式调用接口,在调用 完成的回调函数里面,让UIScrollView复位)。
示例代码中是以最常见的表格组件UITableView来举例的,他是UIScrollView的子类。
另外这个例子中关于数据模型及与调用后台接口的代码不完整,因为这个写上代码就复杂了,而且大家具体的实现可能都不一样,所以就点到为止。这个示例代码持续更新,下一步计划加上那种金属质感的声音,以及看大家的反馈看需要什么。
在3.0的模拟器上测试通过了。有什么问题请回复,谢谢!