MJRefresh簡單分析

1. 使用說明

tableView.mj_header = NGAnimationRefreshHeaderView(refreshingBlock: {

????weakself?.loadData()

})

2.基本原理講解

首先我們先來看兩張圖


通過這兩張圖,我們大致的梳理下MJ的原理。MJ的Header和Footer并不是直接加在UIScrollview(及其子類,本文UITableView和UICollectionView都不再單獨(dú)提起,直接UIScrollview說明,原理是一樣的),而是加在contentInset中的,因此需要使用MJ的時候必須要保證alwaysBounceVertical為True,否則無效。

我們在使用時,直接設(shè)置Header和Footer就可以使用,因?yàn)樵O(shè)置時調(diào)用setter方法,MJ已經(jīng)在內(nèi)部通過這個方法為我們處理好了所有的流程。不得不說,這個控件封裝的的確是太厲害了。


3.流程圖說


其中WillRefresh和NoMoreData這兩個狀態(tài)沒有在流程圖中提及。

WillRefresh 是在當(dāng)前界面沒有顯示,設(shè)置的一個臨時狀態(tài)

NoMoreData 用于上拉加載更多時,沒有更多數(shù)據(jù)的時候


4.詳細(xì)分析和關(guān)鍵代碼分析

MJRefreshComponent類,所有footer和header的父類

監(jiān)聽了scrollView的contentOffset和contentInset和pan的state變化,通過這幾個變化讓MJRefreshComponent子類做出不同的變化。

當(dāng)拉下刷下時,headerView可以一直顯示是因?yàn)?,?dāng)達(dá)到刷新臨界點(diǎn)時,會通過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()

? ? }

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容