MJRefresh的解析

MJRefresh的代码片段:

/** 刷新控件的状态 */
typedef NS_ENUM(NSInteger, MJRefreshState) {
    /** 普通闲置状态 */
    MJRefreshStateIdle = 1,
    /** 松开就可以进行刷新的状态 */
    MJRefreshStatePulling,
    /** 正在刷新中的状态 */
    MJRefreshStateRefreshing,
    /** 即将刷新的状态 */
    MJRefreshStateWillRefresh,
    /** 所有数据加载完毕,没有更多的数据了 */
    MJRefreshStateNoMoreData
};

这个是把所有的状态设置一下,为后面根据状态做铺垫

/** 进入刷新状态的回调 */
typedef void (^MJRefreshComponentRefreshingBlock)();

刷新的时候回掉,当我们刷新成功时 会调用内部的下面这个方法然后会调用block中方法体中的内容.

#pragma mark - 内部方法
- (void)executeRefreshingCallback
{
    dispatch_async(dispatch_get_main_queue(), ^{
        if (self.refreshingBlock) {
            self.refreshingBlock();
        }
        if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
            MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
        }
    });
}

当刷新结束的时候调用下面的这个方法,这个方法会把状态设置成闲置状态从而改变scollView的top的高度,使页面恢复原来的样子

#pragma mark - 公共方法
- (void)endRefreshing
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super endRefreshing];
        });
    } else {
        [super endRefreshing];
    }
}

总的理解MJRefresh的思路就是:

1.初始化视图的形状,加载视图的属性
2.设置监听,通过监听contentOffset的改变,来改变刷新控件的状态
3.根据状态去实现控件的显示状态,视图的内容的形式
4.关闭刷新状态,使状态设置为闲置状态,根据闲置状态使视图恢复原来的样子

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,791评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,250评论 4 61
  • 简书:小子考驾照原文地址://www.greatytc.com/p/76a747786b04 代码区块 标...
    小子考驾照阅读 2,905评论 0 1
  • 10月1日是伽美化妆品成立一周年,也是我从事美业七周年零一个月。 都说从事美业的女孩都是“女汉纸”,她...
    只想和你到天荒地老阅读 3,085评论 0 0
  • 思考小姐是我的一个朋友,之所以叫她思考小姐,是因为她仿佛每时每刻都在思考着,思考的内容,都是一些深沉如人生,人性之...
    月懒西楼阅读 3,878评论 13 5