源码

MJRefresh源码解读

MJRefresh是MJ大神写的一个实现上拉刷新和下拉刷新的第三方库,这个库目前在很多有名的应用上都有使用看,下面就来分析一下MJRefresh的源码。

1.简单应用

下面创建一个绿色的UIScrollview,然后在UIScrollview上加上一个红色的视图作为子视图:

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(020, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    self.scrollView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:_scrollView];

    self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];

    self.scrollView.contentInset = UIEdgeInsetsMake(54000);

    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(00self.scrollView.frame.size.width, self.scrollView.frame.size.height)];
    view.backgroundColor = [UIColor redColor];
    [self.scrollView addSubview:view];

然后我们看一下效果:

在这里我们设置的contentInset.top = 54,54正是这个下拉控件的高度,所以整个下拉控件是完全可见的。

2.源码分析

我们首先看一下MJRefresh的源码的类的结构,由于上拉刷新和下拉刷新控件的原理基本一致,因此这里我们仅使用下拉刷新控件来分析:

下面我们从下拉刷新控件的使用开始来探索源码:

self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];

首先我们的疑问是UIScrollview的mj_header这个属性是哪里来的?我们找到UIScrollview+MJRefresh.h这个文件,这是写的UIScrollview的一个分类,在这个分类中我们找到了mj_header属性,mj_footer属性,但是分类申明属性是没有set方法和get方法的,那么怎么去赋值和取值呢?这时候就要用到runtime的关联属性方法了,我们在UIScrollview+MJRefresh.m文件中找到- (void)setMj_header:(MJRefreshHeader *)mj_header方法看看是不是像我猜想的那样:

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/mjrefreshyuanmajiedu.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:12 月 7, 2018 at 03:26 下午

热评文章

发表回复

[必填]

我是人?

提交后请等待三秒以免造成未提交成功和重复