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