VTMagic的使用介紹(二)

前言

距離VTMagic正式開源已經(jīng)過去整整一個(gè)月贝攒,這短短的時(shí)間里收獲了九百多顆star幻赚,在GitHub月榜Objective-C語言中覆享,其排名基本一直維持在前三靶橱。目前第一是雅虎的AppDevKit,第三名是大家熟知的AFNetworking路捧。坦白說关霸,這樣的成績(jī)完全出乎我的預(yù)料,大家對(duì)VTMagic的認(rèn)可讓我滿懷欣喜的同時(shí)也變得有些忐忑不安杰扫。針對(duì)VTMagic的改進(jìn)队寇,我慢慢開始變得謹(jǐn)慎,每一次改動(dòng)都需要不斷測(cè)試驗(yàn)證章姓,以保證其可以正常運(yùn)行佳遣。個(gè)人的力量是微小的,希望能與各位江湖高手一起完善VTMagic凡伊,參與開源項(xiàng)目將會(huì)是一件很有趣的事零渐!

正文

上一篇文章中,已經(jīng)初步介紹了VTMagic的部分特性和基本使用系忙,同時(shí)也收到了不少反饋诵盼,本文將進(jìn)一步介紹VTMagic使用中的一些要點(diǎn)和技巧,并針對(duì)部分反饋?zhàn)鲆恍┛偨Y(jié)银还,希望對(duì)各位開發(fā)者能有所幫助风宁。

重用機(jī)制

該機(jī)制是整個(gè)框架的核心,它保證了單個(gè)模塊中即使有數(shù)十上百個(gè)頁面蛹疯,應(yīng)用內(nèi)存依舊可控戒财,不會(huì)出現(xiàn)突然暴漲,甚至被系統(tǒng)強(qiáng)制殺死的情況捺弦。在預(yù)加載機(jī)制下饮寞,VTMagic默認(rèn)會(huì)加載當(dāng)前頁面和下一個(gè)頁面,也就是說同時(shí)被加載的頁面可能有兩個(gè)羹呵,也可能有三個(gè)骂际,具體視當(dāng)前頁面的位置而定。若當(dāng)前頁面處于兩側(cè)邊緣冈欢,則被加載的頁面有兩個(gè)歉铝,若在中間則會(huì)有三個(gè)頁面被加載。這也是有些開發(fā)者反饋的viewControllerAtPage:方法會(huì)被多次調(diào)用的原因凑耻。

而之前加載的其它頁面則會(huì)在不需要時(shí)被移除太示,并放到內(nèi)部緩存池中等待重用柠贤。當(dāng)某個(gè)頁面即將被重用時(shí),方法vtm_prepareForReuse會(huì)被調(diào)用类缤,該方法屬于協(xié)議VTMagicReuseProtocol臼勉,需要開發(fā)者在各子頁面中手動(dòng)重寫,通巢腿酰可以在這個(gè)方法中清除頁面舊數(shù)據(jù)宴霸、修正頁面偏移等。

需要說明的是膏蚓,可以通過將屬性needPreloading置為NO來關(guān)閉預(yù)加載機(jī)制瓢谢。在預(yù)加載機(jī)制關(guān)閉的情況下,VTMagic只會(huì)加載當(dāng)前顯示的頁面驮瞧,而不再預(yù)加載下一頁氓扛,同時(shí)點(diǎn)擊菜單項(xiàng)切換時(shí),頁面也不再有切換動(dòng)畫论笔。

生命周期方法

當(dāng)某個(gè)子頁面出現(xiàn)或消失時(shí)采郎,VTMagic能準(zhǔn)確觸發(fā)其相應(yīng)的生命周期方法(viewWillAppear:等)。如果該頁面是可重用的狂魔,則可以將網(wǎng)絡(luò)請(qǐng)求放在viewDidAppear:方法中蒜埋,然后根據(jù)menuInfo.menuId去請(qǐng)求當(dāng)前菜單項(xiàng)的對(duì)應(yīng)數(shù)據(jù),作為必要的補(bǔ)充最楷,請(qǐng)求時(shí)應(yīng)該判斷一下頁面是否已經(jīng)有了最新數(shù)據(jù)理茎;與之相對(duì)的,我們應(yīng)該在viewWillDisappear:viewDidDisappear:方法中將網(wǎng)絡(luò)請(qǐng)求取消掉管嬉,以免被重用后頁面數(shù)據(jù)錯(cuò)亂和造成不必要的流量開銷皂林。而如果頁面是唯一的,即不會(huì)有其它頁面重用該頁面蚯撩,這種情況下也可以將網(wǎng)絡(luò)請(qǐng)求放在viewDidLoad方法中础倍,特別是當(dāng)預(yù)加載邏輯關(guān)閉時(shí),即needPreloadingNO時(shí)胎挎。

談到網(wǎng)絡(luò)請(qǐng)求就不得不說加載本地?cái)?shù)據(jù)的問題沟启。針對(duì)可重用頁面,當(dāng)其menuInfo改變時(shí)(可重寫menuInfosetter方法)犹菇,我們通常需要為頁面加載緩存數(shù)據(jù)德迹,以保證滑動(dòng)切換時(shí)能有良好的用戶體驗(yàn)。關(guān)于緩存數(shù)據(jù)揭芍,可以是從數(shù)據(jù)庫(kù)中讀取胳搞,也可以直接將之前的頁面數(shù)據(jù)保存到某個(gè)變量中以供后來使用,甚至可以從plist文件中獲得,根據(jù)具體情況可靈活選擇肌毅。

刷新和切換

  • reloadData方法會(huì)重新加載所有頁面筷转;
  • reloadDataToPage:方法會(huì)在重新加載所有頁面時(shí),同步聚焦到指定頁面悬而;
  • switchToPage:animated:方法用于在需要的時(shí)候切換到指定頁面呜舒。

以上三個(gè)方法的使用場(chǎng)景各有不同,可根據(jù)具體情況靈活使用笨奠。需要注意的是袭蝗,應(yīng)盡可能避免在viewWillAppear:viewWillDisappear:方法中調(diào)用以上方法,否則會(huì)造成某些頁面的生命周期方法不能準(zhǔn)確觸發(fā)般婆,控制臺(tái)會(huì)輸出類似Unbalanced calls to begin/end appearance transitions for <VTGridViewController: 0x7fc3e2d43a70>的警告呻袭。這是因?yàn)檫@時(shí)的currentViewController與之后viewDidAppear:viewDidDisappear:方法中的currentViewController不是同一個(gè)腺兴,也就是說currentViewController的生命周期沒有完整觸發(fā)。而在viewDidLoad廉侧、viewDidAppear:页响、viewDidDisappear:或者其它地方調(diào)用以上方法都是沒問題的。

多層嵌套

VTMagic支持多層嵌套段誊,也就是在子頁面中可以再嵌套一個(gè)VTMagic闰蚕,類似需求一般常見于iPad項(xiàng)目,其使用原則與單個(gè)VTMagic的使用一致连舍,并無其它明顯區(qū)別没陡。

跨層級(jí)業(yè)務(wù)處理

為方便跨層級(jí)處理業(yè)務(wù),VTMagic提供了在子頁面中直接訪問上層最近主控制器的方法self.magicController索赏,甚至你可以進(jìn)一步通過self.magicController. magicView拿到當(dāng)前的magicView盼玄。當(dāng)然,你也可以通過self.vtm_pageIndex獲取當(dāng)前頁面的索引潜腻。同樣的埃儿,在主控制器中可以通過self.currentViewControllerself.currentPage獲取當(dāng)前顯示的頁面和索引。

自定義組件

VTMagic中幾乎所有組件都支持自定義融涣,框架本身主要提供核心的切換邏輯處理和良好的性能管理童番,開發(fā)者可根據(jù)業(yè)務(wù)需要自定義對(duì)外接口提供的任意組件。

自定義menuItem

你可以在menuItemAtIndex:方法中返回自定義的任意menuItem威鹿,只要它是UIBUtton類型即可剃斧。menuItem是頂部菜單欄中的單個(gè)菜單項(xiàng),其可以支持文本忽你、圖片幼东、文本+圖片等幾種格式。可見菜單欄文本的顏色和字體就是通過修改menuItem的文本和顏色來實(shí)現(xiàn)的筋粗,VTMagic本身并不直接提供修改文本和字體的接口策橘。

自定義菜單欄兩側(cè)視圖

可以通過屬性leftNavigatoinItemrightNavigatoinItem在頂部菜單欄兩側(cè)添加任意視圖,需要注意的是娜亿,被添加的視圖應(yīng)該有確定的size丽已,然后VTMagic會(huì)自動(dòng)完成相應(yīng)布局。

自定義sliderView

由于需求各有不同买决,VTMagic提供的下劃線沛婴、氣泡等樣式可能都不是你想要的,這種情況下你可以通過setSliderView:方法來自定義任意樣式的sliderView督赤,比如類似demo中的顯示一個(gè)三角標(biāo)識(shí)等嘁灯。

自定義separatorView

如果需要,你甚至可以通過方法setSeparatorView:自定義頂部導(dǎo)航分割線躲舌,不過一般情況下應(yīng)該是沒這必要的丑婿。

其它

  • VTMagic中有許多有意思的小feature,比如scrollEnabled没卸、switchEnabled羹奉、switchEvent以及navigationInset等等,詳情請(qǐng)參見VTMagicView.h文件约计。
  • 關(guān)于VTMagic的所有重要修改都會(huì)記錄在GitHub上的變更日志中诀拭,想知道每個(gè)版本都有哪些更新,可查閱該文件煤蚌。

結(jié)束語

最后耕挨,按照慣例,如果你喜歡這個(gè)輪子尉桩,請(qǐng)留下一顆star筒占,這是對(duì)作者最大的鼓勵(lì)和支持,拜謝V├纭8陈痢!假如你有更好的想法或方案沽瘦,也歡迎提交pull request8锕恰!析恋!GitHub地址

上一篇文章:VTMagic的使用介紹

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末良哲,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子助隧,更是在濱河造成了極大的恐慌筑凫,老刑警劉巖滑沧,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異巍实,居然都是意外死亡滓技,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門棚潦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來令漂,“玉大人,你說我怎么就攤上這事丸边〉兀” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵妹窖,是天一觀的道長(zhǎng)纬朝。 經(jīng)常有香客問我,道長(zhǎng)骄呼,這世上最難降的妖魔是什么共苛? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蜓萄,結(jié)果婚禮上隅茎,老公的妹妹穿的比我還像新娘。我一直安慰自己绕德,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布摊阀。 她就那樣靜靜地躺著耻蛇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胞此。 梳的紋絲不亂的頭發(fā)上臣咖,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音漱牵,去河邊找鬼夺蛇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酣胀,可吹牛的內(nèi)容都是我干的刁赦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼闻镶,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼甚脉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起铆农,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤牺氨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猴凹,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夷狰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了郊霎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沼头。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖歹篓,靈堂內(nèi)的尸體忽然破棺而出瘫证,到底是詐尸還是另有隱情,我是刑警寧澤庄撮,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布背捌,位于F島的核電站,受9級(jí)特大地震影響洞斯,放射性物質(zhì)發(fā)生泄漏毡庆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一烙如、第九天 我趴在偏房一處隱蔽的房頂上張望么抗。 院中可真熱鬧,春花似錦亚铁、人聲如沸蝇刀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吞琐。三九已至,卻和暖如春然爆,著一層夾襖步出監(jiān)牢的瞬間站粟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工曾雕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奴烙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓剖张,卻偏偏與公主長(zhǎng)得像切诀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搔弄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,161評(píng)論 25 707
  • 內(nèi)容抽屜菜單ListViewWebViewSwitchButton按鈕點(diǎn)贊按鈕進(jìn)度條TabLayout圖標(biāo)下拉刷新...
    皇小弟閱讀 46,762評(píng)論 22 665
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)趾牧、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,105評(píng)論 4 62
  • 多年以后他才明白那看似來來回回的鳥肯污,其實(shí)并不是最初的那一只翘单,他所感動(dòng)的吨枉,是自己自以為的歸巢。其實(shí)候鳥無非是尋求適宜...
    可可西里一根草閱讀 246評(píng)論 0 1
  • 童話不是盡都美好哄芜,其實(shí)仍然是現(xiàn)實(shí)的折射貌亭。只是,相比現(xiàn)實(shí)认臊,童話的溫暖力量圃庭,在于撫慰人心,在于用光明和希望失晴,讓人相信剧腻,...
    流落于筆尖的靈魂閱讀 191評(píng)論 0 0