UICollectionView基礎(chǔ)

原文鏈接

CollectionView的設(shè)計(jì)分離了數(shù)據(jù)和數(shù)據(jù)的展示方式.所以你可以通過很少量的代碼來(lái)實(shí)現(xiàn)一個(gè)CollectionView.

相關(guān)類和協(xié)議

下圖列出了UIKitUICollectionView的相關(guān)類,并給它們劃分了不同的角色.

  • 容器管理

    • UICollectionView:繼承自UIScrollView,通過layout對(duì)象完成數(shù)據(jù)的布局展示.
    • UICollectionViewController:內(nèi)部已經(jīng)包含了一個(gè)可以使用的UICollectionView.
  • 內(nèi)容管理

    • UICollectionViewDataSource協(xié)議:必須實(shí)現(xiàn)該協(xié)議用來(lái)提供數(shù)據(jù)源以及要展示的View(通常是cell).
    • UICollectionViewDelegate協(xié)議:用來(lái)監(jiān)聽UICollectionView的行為,例如跟蹤UICollectionView中某一項(xiàng)的選中和高亮狀態(tài).
  • 視圖

    • UICollectionReusableView:所有UICollectionView中用到的View都必須是UICollectionReusableView的一個(gè)實(shí)例.該類提供了一個(gè)重用機(jī)制,用來(lái)提升UICollectionView在滑動(dòng)過程中的性能.
    • UICollectionViewCell:UICollectionReusableView的一個(gè)特殊子類,是數(shù)據(jù)源中的單項(xiàng)數(shù)據(jù)的載體.
  • 布局

    • UICollectionViewLayout:負(fù)責(zé)定義cell和reusableView的位置,大小和可見屬性.
    • UICollectionViewLayoutAttributes:布局過程中,layout對(duì)象會(huì)創(chuàng)建一個(gè)layout attribute對(duì)象,用來(lái)告知UICollectionView何時(shí)何地合適的展示cell和reusableView.
    • UICollectionViewUpdateItem:當(dāng)通過UICollectionView插入,刪除或移動(dòng)數(shù)據(jù)項(xiàng)時(shí),layout對(duì)象會(huì)接收一個(gè)該類的實(shí)例.你不需要手動(dòng)創(chuàng)建該類的對(duì)象.
    • UICollectionViewFlowLayout:流式布局對(duì)象,一個(gè)用來(lái)實(shí)現(xiàn)網(wǎng)格視圖或者線性布局的layout對(duì)象.
    • UICollectionViewDelegateFlowLayout:用來(lái)動(dòng)態(tài)自定義流式布局.

重用機(jī)制

UICollectionView使用一套重用機(jī)制來(lái)提升性能.當(dāng)一個(gè)view離開屏幕時(shí),它會(huì)被加入到一個(gè)緩存池中,而不是被刪除掉.當(dāng)有新內(nèi)容需要展示時(shí),view會(huì)從緩存池中移除,并用來(lái)展示新的數(shù)據(jù).UICollectionReusableView是實(shí)現(xiàn)重用機(jī)制的關(guān)鍵.
UICollectionView支持三種不同類型的reusable view,每一種都有特定的使用場(chǎng)景:

  • UICollectionViewCell:用來(lái)展示數(shù)據(jù)源中的內(nèi)容.cell對(duì)象可以管理自身的選中和高亮狀態(tài).你可以子類化一個(gè)UICollectionViewCell來(lái)自定義數(shù)據(jù)的展示樣式.
  • Supplementary views:用來(lái)展示數(shù)據(jù)項(xiàng)中每一組(section)的信息.與cell類似,Supplementary views是數(shù)據(jù)驅(qū)動(dòng)的,但與cell不同的是,它不是強(qiáng)制使用的,而且由layout對(duì)象進(jìn)行管理.通常情況下,流式布局(flow layout)對(duì)象支持頭視圖(header)和尾視圖(footer).
  • Decoration views:裝飾視圖,與數(shù)據(jù)源無(wú)關(guān),由layout對(duì)象負(fù)責(zé)展示.

注意,與UITableView不同的是,UICollectionView沒有提供一個(gè)默認(rèn)樣式的cell.
dataSource對(duì)象只負(fù)責(zé)提供數(shù)據(jù),并不直接創(chuàng)建views.當(dāng)需要獲取一個(gè)view時(shí),請(qǐng)調(diào)用UICollectionView的相關(guān)方法.詳見后文.

布局方式

layout對(duì)象只負(fù)責(zé)UICollectionView的視覺樣式.數(shù)據(jù)源和數(shù)據(jù)呈現(xiàn)方式的分離設(shè)計(jì)可以在不改變數(shù)據(jù)源的情況下,動(dòng)態(tài)化的變化布局.
一個(gè)layout對(duì)象從不直接管理views,因?yàn)槠洳⒉恢苯訐碛腥魏涡问降膙iews,而是通過創(chuàng)建attribute對(duì)象來(lái)定義view的位置,大小以及其他視覺屬性.然后由UICollectionView負(fù)責(zé)將attribute對(duì)象應(yīng)用到view.
下圖是一個(gè)垂直方向的流式布局示意圖:

layout對(duì)象不僅可以用來(lái)管理大小尺寸,還能指定其他視覺屬性,比如透明度,3D旋轉(zhuǎn)以及可見性等.你可以通過控制這些屬性來(lái)自定義一個(gè)布局方式.

內(nèi)建動(dòng)畫

UICollectionView提供了基本的使用動(dòng)畫.當(dāng)插入或者刪除一項(xiàng)(item)或者組(section)時(shí),UICollectionView會(huì)默認(rèn)動(dòng)畫受影響的views.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耘子,一起剝皮案震驚了整個(gè)濱河市焕议,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抠蚣,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件面殖,死亡現(xiàn)場(chǎng)離奇詭異竖哩,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)脊僚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門相叁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吃挑,你說我怎么就攤上這事钝荡。” “怎么了舶衬?”我有些...
    開封第一講書人閱讀 157,435評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵埠通,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我逛犹,道長(zhǎng)端辱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評(píng)論 1 284
  • 正文 為了忘掉前任虽画,我火速辦了婚禮舞蔽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘码撰。我一直安慰自己渗柿,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評(píng)論 6 386
  • 文/花漫 我一把揭開白布脖岛。 她就那樣靜靜地躺著朵栖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柴梆。 梳的紋絲不亂的頭發(fā)上陨溅,一...
    開封第一講書人閱讀 49,837評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音绍在,去河邊找鬼门扇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偿渡,可吹牛的內(nèi)容都是我干的臼寄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,987評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼溜宽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼脯厨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起坑质,我...
    開封第一講書人閱讀 37,730評(píng)論 0 267
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤合武,失蹤者是張志新(化名)和其女友劉穎临梗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稼跳,經(jīng)...
    沈念sama閱讀 44,194評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盟庞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了汤善。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片什猖。...
    茶點(diǎn)故事閱讀 38,664評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖红淡,靈堂內(nèi)的尸體忽然破棺而出不狮,到底是詐尸還是另有隱情,我是刑警寧澤在旱,帶...
    沈念sama閱讀 34,334評(píng)論 4 330
  • 正文 年R本政府宣布摇零,位于F島的核電站,受9級(jí)特大地震影響桶蝎,放射性物質(zhì)發(fā)生泄漏驻仅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評(píng)論 3 313
  • 文/蒙蒙 一登渣、第九天 我趴在偏房一處隱蔽的房頂上張望噪服。 院中可真熱鬧,春花似錦胜茧、人聲如沸粘优。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雹顺。三九已至,卻和暖如春芬位,著一層夾襖步出監(jiān)牢的瞬間无拗,已是汗流浹背带到。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工昧碉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人揽惹。 一個(gè)月前我還...
    沈念sama閱讀 46,389評(píng)論 2 360
  • 正文 我出身青樓被饿,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搪搏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狭握,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評(píng)論 2 349

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

  • 本文為大地瓜原創(chuàng),歡迎知識(shí)共享疯溺,轉(zhuǎn)載請(qǐng)注明出處论颅。雖然你不注明出處我也沒什么精力和你計(jì)較哎垦。作者微信號(hào):christg...
    大地瓜123閱讀 407評(píng)論 0 0
  • 最近將 UICollectionView 進(jìn)行了一個(gè)全面的學(xué)習(xí)及總結(jié),參考了網(wǎng)上大量的文章恃疯,把官方文檔進(jìn)行了大概翻...
    varlarzh閱讀 21,391評(píng)論 3 94
  • UICollectionView基礎(chǔ) 初始化部分: UICollectionViewLayout UICollec...
    問題餓閱讀 626評(píng)論 0 4
  • 在創(chuàng)建自定義的layout之前漏设,你需要知道UICollectionViewFlowLayout提供的很多特性已經(jīng) ...
    縱橫而樂閱讀 20,664評(píng)論 7 91
  • 上一章 轎車停在斯德哥爾摩大酒店門口時(shí)郑口,已經(jīng)是當(dāng)?shù)貢r(shí)間晚上7點(diǎn)。對(duì)于冬季的斯德哥爾摩來(lái)講盾鳞,已經(jīng)是華燈璀璨了犬性。這座集...
    marvinmwb閱讀 268評(píng)論 0 0