模仿UITableView建立自己的瀑布流控制器

發表於2016-03-31

1.瀑布流

瀑布流,又稱瀑布流式佈局。是比較流行的一種網站頁面佈局,視覺表現為參差不齊的多欄佈局,隨著頁面滾動條向下滾動,這種佈局還會不斷載入資料塊並附加至當前尾部。

QQ20150916-4.png

2.瀑布流中需要注意的點

  1. cell的新增順序:瀑布流佈局中,每一行的cell擺放的位置並不是按順序擺放,而是優先新增在上一行中高度最短的列中。如果不是按照最短高度所在的列優先新增,就會導致列遇列之間高度相差越來越大,接下來我們用圖片來總結理解為什麼要這樣做。
QQ20150916-2.png
QQ20150916-3.png

選擇了按最短列優先新增需要我們做的是,在每次新增後,需要找到總列數中,高度最短的一列,需要我們寫一個比較列數高度最小的比較演算法,用一個陣列裝入不同列的高度,選出高度最短的列號作為下次新增的列號。

  1. cell的建立規則:在瀑布流中,由於資料比較多,不能一次性建立所有的cell,這樣會造成記憶體的浪費。我們可以發現,當cell出現在螢幕上(肉眼可以觀察到的位置)時,我們才有必要把這個cell顯示出來,就如UITableViewCell一樣,需要的時候才建立,不需要的時候放在快取池裡,建立cell的時候優先在快取池中查詢有無可迴圈利用的cell。

    總結:在建立cell的時候,我們的規則是,優先從快取池中尋找可迴圈利用的cell,有的話直接使用cell,沒有可迴圈利用的話再建立。

3.結構設計

要顯示一個瀑布流佈局,首先我們要有資料,於是我們可以建立資料來源的protocol,我們需要知道每個cell的高度和點選cell的事件處理等,我們可以建立瀑布流控制元件的代理delegate用來監聽控制器點選事件。怎麼樣,是不是感覺這個結構很熟悉呢,這不就是我們天天在用的UITableView本來的結構嗎?

我們先來看一下UITableView是怎麼展示資料的:

  1. 呼叫資料來源的下面方法得知一共有多少組資料

  1. 呼叫資料來源的下面方法得知每一組有多少行資料

  1. 呼叫資料來源的下面方法得知每一行顯示什麼內容

好了,這樣的結構我們再熟悉不過了,我們接著來模範UITableView來建立屬於我們自己的瀑布流控制器

QQ20150915-1.png
  1. 首先我們需要知道我們資料來源中需要顯示多少個cell、每個index索引顯示對應的是哪個cell、每一行需要顯示多少列。
  2. 在代理中,我們需要知道使用者點選了是哪個cell,每一個index所對應的cell的高度是多少。
  3. 在瀑布流控制元件中,我們僅僅需要像UITableView一樣暴露dataSource、delegate屬性,和一些常用的公共方法

4.實現效果

在需要實現瀑布流的程式中,可以直接把我們生成的類作為控制元件來使用,就能輕鬆達到瀑布流的效果,如下:

5.完整的實現檔案程式碼

以後需要用到瀑布流的時候,直接拖入檔案像UITableView那樣呼叫就可以使用了~怎麼樣,是不是很方便呢?

6.後記:

需要demo的我再fa最近開始學習swift,由OC轉化為swift希望學起來比較快,希望學習的步伐能越來越快,還請各位前輩們多多指導

相關文章