iOS编写下拉刷新控件

 更新时间:2016年04月13日 17:17:20   作者:车宝大人  
这篇文章主要介绍了iOS编写下拉刷新控件的相关资料,iOS如何写个普通的下拉刷新的控件,需要了解的朋友可以参考下文

现在iOS里有很多成熟的下拉刷新控件,比如MJRefresh,SVPullToRefresh

我这里参考了SV的写法,但是回调用的是代理,没有用block,个人感觉用代理更简洁一点

下拉刷新的基本原理

在scrollview的上面和下面分别添加一个view,上面的是下拉的时候展示下拉动画的headerView,下面的是上拉加载更多的时候展示动画的footerView

这里的headerView和footerView都是自己添加的,和tableView自己的header,footer不一样

headerView是添加在scrollView的最上面的,设置frame的时候是origin.y是负数

当下拉达到条件就触发刷新,同时更改scrollview的contentInsert.top值,以使手指松开之后headerView仍然可以露出来

刷新结束之后,停止headerView上面的动画,然后把contentInsert的值改回去

footerView是添加在最下方的,frame.origin.y是scrollview的contentSize.height

在上拉到一定程度之后就更改scrollview的contentInsert,使footerView可以露出来,加载结束之后就改回去

如何写下拉刷新

写下拉刷新一般都是给scrollview写一个类别,添加一个新的方法,来把headerView和footerView添加到scrollview上面

给scrollview声明一个headerView类型的属性(如何给类别添加属性)

然后给scrollview的contentoffset属性添加监听者,这个监听者就是headerView

这样,在scrollview滑动的时候,就可以监听到滑动的情况,并根据数据来决定是否刷新和时候改变scrollview.contentInsert.y

然后再写一个停止刷新的方法,用来停止刷新动画和更改scrollview.contentInsert.y

这样scrollview的扩展就写完了,然后就要写自定义的headerView

headerView的动画是根据需要些的,数据来源就是监听到的contentoffset

在scrollViewDidScroll方法里来处理监听到的值

这里使用了一个枚举类型来记录刷新状态,从而控制动画

虽然原理简单,但是实践起来遇到了很多困难,有技术上的,也有逻辑上的,心力交瘁,才搞出来一个小

Demo:https://github.com/chebaoGitHub/CBGeneralRefreshView

footerView同理

结语:

写这个控件最大的收获就是加深了对set get方法的理解,对scrollview的理解,对category的理解

但是这里仍然有一个bug

在下拉达到条件,headerView开始动画,设置contentInsert之后,正在回弹的scrollview会出现抖动,手指滑的越快抖动越厉害,不知道为什么,现在还没有解决,希望大家可以有好的解决方法,大家共同学习。

相关文章

  • iOS开发之手势gesture详解

    iOS开发之手势gesture详解

    本篇文章介绍了iOS开发之手势gesture,现在分享给大家,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2016-11-11
  • iOS应用开发中UIScrollView滚动视图的基本用法总结

    iOS应用开发中UIScrollView滚动视图的基本用法总结

    这篇文章主要介绍了iOS应用开发中UIScrollView滚动视图的基本用法总结,作者还介绍了重写UIScrollView中的hitTest方法来解决长按的事件问题,需要的朋友可以参考下
    2016-02-02
  • 详解Swift 利用Opration和OprationQueue来下载网络图片

    详解Swift 利用Opration和OprationQueue来下载网络图片

    这篇文章主要介绍了详解Swift 利用Opration和OprationQueue来下载网络图片的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下
    2017-09-09
  • iOS仿支付宝芝麻信用分数仪表盘动画效果

    iOS仿支付宝芝麻信用分数仪表盘动画效果

    这篇文章主要为大家详细介绍了iOS仿支付宝芝麻信用分数仪表盘动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • Objective-C 代码与Javascript 代码相互调用实例

    Objective-C 代码与Javascript 代码相互调用实例

    这篇文章主要介绍了Objective-C 代码与Javascript 代码相互调用实例的相关资料,现在的APP 应用有时候会调用网页上的内容,为了增加用户体验,这里写下个实例,需要的朋友可以参考下
    2016-10-10
  • iOS长按UIlabel实现可复制功能

    iOS长按UIlabel实现可复制功能

    在我们日常的开发中经常会遇到一些小需求,比如需要长按控件来拷贝控件中得内容,所以这篇文章跟大家分享下iOS中长按UIlabel实现可复制功能的方法,有需要的朋友们可以参考借鉴。
    2016-09-09
  • 单纯聊一聊iOS10适配

    单纯聊一聊iOS10适配

    这篇文章主要为大家简单介绍了iOS10适配的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • IOS 的弹性滚动解决方案

    IOS 的弹性滚动解决方案

    所谓弹性滚动就是指在翻动长页面手指离开时,由慢到块,由快到慢的过度。这篇文章主要介绍了IOS 的弹性滚动解决方案,需要的朋友可以参考下
    2016-10-10
  • iOS开发之级联界面(推荐界面)搭建原理

    iOS开发之级联界面(推荐界面)搭建原理

    这篇文章主要为大家详细介绍了iOS级联界面(推荐界面)搭建原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 如何使用IOS实现WIFI传输

    如何使用IOS实现WIFI传输

    这篇文章主要介绍了如何使用IOS实现WIFI传输,对局域网传输和HTTP感兴趣的同学,可以参考下
    2021-04-04

最新评论