iOS MJRefresh思路大解析

主要思路通過UITableView繼承之UIScrollView胧卤,在UIScrollView上實現(xiàn)下拉效果撰洗。

因為下拉的是在一個UIView上,所以一開始就要創(chuàng)建一個UIView將其添加到UIScrollView上。

為了讓用戶調(diào)用接口簡單方便,所以通過創(chuàng)建一個分類來實現(xiàn)個實現(xiàn)接口斥杜。

UIScrollView

(MJRefresh)這個分類是用創(chuàng)建下拉和上拉的效果的UIView,在這里還會創(chuàng)建監(jiān)聽KVO,用于監(jiān)聽下拉和上拉的狀態(tài)變化沥匈。

代碼思路:

這里分為五部分蔗喂,首先是共有部分,下拉的文字提示模塊高帖,下拉動畫提示模塊缰儿,上拉文字模塊,上拉動畫提示模塊散址。

首先要理解的是UITableView繼承之UIScrollView乖阵,這是我們實現(xiàn)涮新的基礎(chǔ)。因為我們滑動動作的監(jiān)聽著是UIScrollView爪飘,刷新狀態(tài)的改變是有UIScrollView告述我們的义起。所以我們首要做的是如何監(jiān)聽UIScrollView的改變,大家都會想可以用ScrollView的代理方法可以監(jiān)聽师崎。是可以實現(xiàn)但問題是你寫的庫是給別人用的,你只能提供的入口是越簡單越好椅棺。這里MJ使用了ScrollView的分類來實現(xiàn)入口的調(diào)用以SEL來實現(xiàn)回掉犁罩。

知識點一在分類中進行實例化齐蔽,

大家都知道在分類中是不能進行實例化的,因為分類是一個類它是沒有開辟內(nèi)存的能力床估,也就是無法往里添加?xùn)|西含滴。但是有種情況是可以在分類中進行實例化的,那就是分類中直接使用runtime機制進行實例化丐巫。使用runtime機制進行實例化那就受外部條件幾乎為零谈况,我們的使用oc語言進行實例化的底層就是這樣(這里不懂的可以參考o(jì)c方法的緩存機制)。

知識點二使用到了多繼承递胧,

在這里有一個共同的父類那就是(也稱之為基類)MJRefreshComponent碑韵。通過繼承使我們的業(yè)務(wù)邏輯進行了分層,便于修改和維護缎脾。

知識點三使用SEL來進行回掉祝闻,

SEL概論:Objective-C在編譯的時候,會根據(jù)方法的名字(包括參數(shù)序列)遗菠,生成一個用來區(qū)分這個方法的唯一的一個ID联喘,這個ID就是SEL類型的。我們需要注意的是辙纬,只要方法的名字(包括參數(shù)序列)相同豁遭,那么它們的ID都是相同的。就是說贺拣,不管是超類還是子類蓖谢,不管是有沒有超類和子類的關(guān)系,只要名字相同那么ID就是一樣的纵柿。

SEL具體的使用方法如下:

1SEL變量名=@selector(方法名字);

2SEL變量名=NSSelectorFromString(方法名字的字符串);

3NSString*變量名=NSStringFromSelector(SEL參數(shù));

創(chuàng)建步驟:

首先要明確的是MJRefreshComponent是父類蜈抓,不管是怎么創(chuàng)建的一定會執(zhí)行父類中的init方法,這也就是我們開始昂儒。

步驟一

通過在子類中使用構(gòu)造化實例

步驟二

進行初始化

init

重寫方法:

獲取父類方法沟使,UIview創(chuàng)建就調(diào)用:

創(chuàng)建一個KVO,用于監(jiān)聽UIScrollView的狀態(tài)

通過KVO調(diào)用MJRefreshHeader中-(void)scrollViewContentOffsetDidChange:(NSDictionary*)change來對scrollView是否拉動進行邏輯處理

邏輯處理過程中會涉及到set方法的state這里會用來改變UI的狀態(tài)

文字UI

動畫UI

總結(jié):

這里用了一個多繼承來進行分層渊跋,這是一個很好的借鑒的地方發(fā)腊嗡,總的來說太該是有三層。第一層大概是父類拾酝,這層這一塊主要是進行初始化和對外部的接口燕少,

第二層大概都是下拉的邏輯處理,第三層是UI的創(chuàng)建和根據(jù)業(yè)務(wù)的變化對UI進行改變蒿囤。(這一塊我只是正對普通狀態(tài)下的模塊進行總結(jié)客们,自定義動畫和文字是有所不同的)。這樣的思路對我們UI和邏輯很好的分層進行了一個很好的借鑒對我們來說是一個例子。這是我目前的總結(jié)我感覺還是有什么地方不太細致以后還要加一改動底挫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恒傻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子建邓,更是在濱河造成了極大的恐慌盈厘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件官边,死亡現(xiàn)場離奇詭異沸手,居然都是意外死亡,警方通過查閱死者的電腦和手機注簿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進店門契吉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滩援,你說我怎么就攤上這事栅隐。” “怎么了玩徊?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵租悄,是天一觀的道長。 經(jīng)常有香客問我恩袱,道長泣棋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任畔塔,我火速辦了婚禮潭辈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘澈吨。我一直安慰自己把敢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布谅辣。 她就那樣靜靜地躺著修赞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桑阶。 梳的紋絲不亂的頭發(fā)上柏副,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天,我揣著相機與錄音蚣录,去河邊找鬼割择。 笑死,一個胖子當(dāng)著我的面吹牛萎河,可吹牛的內(nèi)容都是我干的荔泳。 我是一名探鬼主播蕉饼,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼换可!你這毒婦竟也來了椎椰?” 一聲冷哼從身側(cè)響起厦幅,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤沾鳄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后确憨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體译荞,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年休弃,在試婚紗的時候發(fā)現(xiàn)自己被綠了吞歼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡塔猾,死狀恐怖篙骡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丈甸,我是刑警寧澤糯俗,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站睦擂,受9級特大地震影響得湘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顿仇,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一淘正、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧臼闻,春花似錦鸿吆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至市埋,卻和暖如春黎泣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缤谎。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工抒倚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坷澡。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓托呕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子项郊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫馅扣、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,066評論 4 62
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,791評論 25 707
  • 要學(xué)會嘗試著把快樂帶給別人着降,明天周六差油,可以睡個懶覺,睡醒了就去辦公室任洞。 150.8 day8
    Little_L閱讀 143評論 0 0
  • 1)從本篇文章中我學(xué)到的最重要的概念: 無論父母如何“嘮叨”教育我們蓄喇,我們一定不要嫌煩,要耐心聽他們說交掏,未來的某一...
    煙竹12閱讀 202評論 6 0
  • 吻一個遙遠的夢盅弛, 觀一處眼前的景钱骂, 走一段夢想的路, 思一陣未來的風(fēng)挪鹏, 盼一位知心的人见秽。 你笑我, 還在這兒傻傻等...
    小劇在成長閱讀 323評論 2 1