追加:iOS11和iPhoneX已适配,由于iOS11中UITableView默认开启高度预估(行高、区头和区尾),由此引起的页面回弹等现象,关闭高度预估即可解决,控件内部已做调整,无需更改代码,替换新版代码即可解决。 --2017/10/11
最近项目中需要自定义的刷新动画,所以研究了下MJRefresh的实现原理,确实非常巧妙。
下面说一下mj的实现原理:
首先,在UITableView或者UICollectionView的最上方和最下方各放置一个刷新的控件<mj_header和mj_footer>;
然后,实现对UITableView或者UICollectionView的监听,主要使用KVO,监听三个属性,contentOffset,contentSize和滑动手势的状态改变;
最后,根据监听到的变化,改变刷新控件的显示。
剩下的就是一些细节的处理,这里有一个我写好的demo,感兴趣的同学可以下载看一下:https://github.com/wangzhaomeng/LLRefresh
效果图:
觉得好,请给个star,谢谢!