MJRefresh的解析

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

上一篇下一篇

猜你喜欢

热点阅读