美文网首页
MJRefresh简单分析

MJRefresh简单分析

作者: limbo_lyn | 来源:发表于2020-01-19 17:19 被阅读0次

    1. 使用说明

    tableView.mj_header = NGAnimationRefreshHeaderView(refreshingBlock: {

        weakself?.loadData()

    })

    2.基本原理讲解

    首先我们先来看两张图

    通过这两张图,我们大致的梳理下MJ的原理。MJ的Header和Footer并不是直接加在UIScrollview(及其子类,本文UITableView和UICollectionView都不再单独提起,直接UIScrollview说明,原理是一样的),而是加在contentInset中的,因此需要使用MJ的时候必须要保证alwaysBounceVertical为True,否则无效。

    我们在使用时,直接设置Header和Footer就可以使用,因为设置时调用setter方法,MJ已经在内部通过这个方法为我们处理好了所有的流程。不得不说,这个控件封装的的确是太厉害了。

    3.流程图说

    其中WillRefresh和NoMoreData这两个状态没有在流程图中提及。

    WillRefresh 是在当前界面没有显示,设置的一个临时状态

    NoMoreData 用于上拉加载更多时,没有更多数据的时候

    4.详细分析和关键代码分析

    MJRefreshComponent类,所有footer和header的父类

    监听了scrollView的contentOffset和contentInset和pan的state变化,通过这几个变化让MJRefreshComponent子类做出不同的变化。

    当拉下刷下时,headerView可以一直显示是因为,当达到刷新临界点时,会通过resetInset方法让UIScrollView下移

    5.模拟拉上刷新代码

        let scrollView = UIScrollView()

        scrollView.backgroundColor = .red

        self.view.addSubview(scrollView)

        scrollView.alwaysBounceVertical = true

        scrollView.contentInset = UIEdgeInsets(top: -30, left: 0, bottom: 0, right: 0)

        let topView = UIView(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 30))

        topView.backgroundColor = .cyan

        scrollView.addSubview(topView)

        scrollView.snp.makeConstraints { (make) in

            make.edges.equalToSuperview()

        }

    相关文章

      网友评论

          本文标题:MJRefresh简单分析

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