美文网首页
MJRefresh的解析

MJRefresh的解析

作者: 赖熊 | 来源:发表于2016-12-12 15:04 被阅读0次

    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.关闭刷新状态,使状态设置为闲置状态,根据闲置状态使视图恢复原来的样子

    相关文章

      网友评论

          本文标题: MJRefresh的解析

          本文链接:https://www.haomeiwen.com/subject/mnxymttx.html