天天看點

iOS開發系列-九宮格算法-xib

給大家示範 應用程式下載下傳 小項目,效果圖:涉及知識點:懶加載,九宮格算法,字典轉模型,自定義UIView ,xib檔案的使用

iOS開發系列-九宮格算法-xib

首先把素材拖到Xcode項目中:簡單看一下素材檔案

iOS開發系列-九宮格算法-xib

此時大家應該首先關注.plist字尾的檔案,裡面存放的是我們用的資料,接下來看一下plist檔案裡面的資料

iOS開發系列-九宮格算法-xib

從這裡面可以看到有12個應用程式下載下傳,也就是12個UIView控件,

接下來,我們就加載這個plist檔案,使用裡面的資料.首先不是把plist檔案拖拽到Xcode中就會自動使用的,而是加載plist檔案,才能使用裡面的資料

因為plist檔案根節點是一個NSArray類型的,是以我們建立一個數組屬性,儲存plist檔案中的資料

iOS開發系列-九宮格算法-xib

數組屬性建立完成,那麼就加載plist檔案。也就是把plist和apps聯系到一起,也就是加載資料

那麼什麼時候需要加載資料呢?這個時候就涉及到了(懶加載)知識點

懶加載:什麼時候需要資料,什麼時候去加載,如果不需要資料,我就不加載資料;看起來比較懶的做法,是以叫懶加載,怎麼實作懶加載呢?

分析:隻要知道什麼時候需要使用資料,那麼我就知道了什麼時候去加載資料了。 我們在使用資料的時候一般都是通過點文法(getter方法)例如self.apps

這就是調用getter方法,擷取到apps數組裡面的資料。程式中,我們肯定有很多地方會用到self.apps,第一次使用self.apps點文法的時候,我們需要去加載plist檔案,當第二次使用self.apps的時候,此時apps裡面已經有plist檔案中的資料了,我們就沒有必要再去重新加載了,雖然說加載了也不會出問題,但是會影響程式的性能。如果這樣分析,我們是不是可以在getter方法中做點什麼,如果有資料就不加載了,沒資料的時候,我們就去加載呢?懶加載的實作:

iOS開發系列-九宮格算法-xib

這個時候apps數組中存儲的是12個字典,但是字典在以後的使用中有很多問題和不友善書寫的地方,那麼我們就涉及到了字典轉模型

把apps中的字典轉換成模型  模型是什麼呢?模型就是繼承NSObject的一個類,這個類中的成員屬性,儲存字典中的資料

是以字典轉模型以後,apps裡面存儲的就是模型對象,不是字典了

字典轉模型的重點就是:把字典中鍵值對存儲的資訊 轉換成 模型對象的成員屬性的值

首先建立一個類,這個類沒有什麼特殊要求,隻要繼承NSObject就行了

這個類要有成員屬性,成員屬性是根據字典中的鍵值對設定的:一個鍵值對就對應類中的一個成員屬性,是以這個類有兩個成員屬性。确定一個屬性:類型, 屬性名稱; 類型的确定:類型取決于鍵值對中的Value的類型, 屬性名取決于key值。

iOS開發系列-九宮格算法-xib

AppsModel模型類已經建立好了,隻要把字典中的資料指派給模型中的成員屬性就可以了,然後把模型對象添加到數組中,傳給_apps,此時apps數組中存儲的就是模型對象了,也就是所謂的字典轉模型.在懶加載中實作字典轉模型

iOS開發系列-九宮格算法-xib

模型代碼優化:

接下來,我們在模型類中實作快速建立對象方法,首先在AppsModel.h檔案中聲明方法

iOS開發系列-九宮格算法-xib

在AppsModel.m檔案中實作方法

iOS開發系列-九宮格算法-xib

此時,懶加載中字典轉模型可以這樣寫:

iOS開發系列-九宮格算法-xib

好了,到目前為止,我們的self.apps數組中存儲的模型資料。資料加載 工作完成了,下面我們就來搭建界面

分析效果圖:

iOS開發系列-九宮格算法-xib

界面上有12個應用程式下載下傳圖示,12數字是怎麼來的呢?是數組self.apps的長度。也就是self.apps裡面存儲了幾個模型。歸根結底是從plist檔案中擷取的

iOS開發系列-九宮格算法-xib

再分析:12個應用程式下載下傳圖示的大小都是一樣的,格式也是一樣的,就是每個應用程式下載下傳圖示(uiview)都是由圖檔(imageView),名字(lable),下載下傳按鈕(button)組成的,除了圖檔和名字顯示的資料不一樣,别的都一樣。 此時介紹九宮格算法,先搭建12個小的UIView顯示在界面上.

九宮格算法的本質就是for循環,因為每個人設定的資料都是不一樣,我就以我的為例子,主要掌握的就是知道每個控件的x,y值是怎麼計算來的,x值要用到i%3,y值要用到i/3,大家懂得這個就可以了

iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib

做到這一步,我們已經有了大概的輪廓了,這個時候隻要給每個紅色的UIView添加控件就可以了。剛才分析,每個小的UIView裡面有3個控件,這個時候添加的時候,我們需要用代碼設定frame,每個控件的屬性,很麻煩,代碼很繁瑣。

下面介紹xib檔案的建立和使用,xib是幹什麼用的,xib是用來描述部分螢幕的界面的,而storyBoard是用來描述整個螢幕界面的

iOS開發系列-九宮格算法-xib

為什麼要提出xib呢,假如,我們用xib描述每個小的UIView,然後我們把xib描述的UIView直接整體加載到self.view中,很簡單很友善。這個時候也不需要設定每個UIView的子控件的frame了,屬性在屬性區直接設定了,很簡單,很友善

介紹:xib檔案的建立

iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib

此時xib檔案建立完成了,已經存在xib檔案了;打開xib檔案,

iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib

我們可以向這裡面添加任何控件:

iOS開發系列-九宮格算法-xib

那麼,我們接下來要給控件指派,把self.apps裡面的資料指派給對應的控件

要給控件指派,那麼就先要拿到控件,怎麼拿到控件呢? 前面我們說,xib檔案和storyBoard很像,我們看看storyBoard是怎麼做的,

我們一般都是用拖線的方式取到控件,在ViewController.m中取到控件。那麼storyBoard是怎麼和ViewController聯系起來的呢,拖線必須滿足一定的條件才能拖,不然是不能拖的。那麼storyBoard和ViewController滿足了什麼條件呢?下面看一下ViewController,

其實ViewController隻是一個類,隻不過繼承自UIViewController。為什麼要繼承UIViewController呢?我們看一下storyBoard

iOS開發系列-九宮格算法-xib

ViewController是最外層的,其餘的都是它的子控件。Xcode自己設定了一個ViewController類,這個類繼承UIViewController,然後通過把ViewController設定為ViewController的真正的類。就把故storyBoard和ViewController類聯系起來了。那麼我們模仿storyBoard ,設定xib

剛才我們說了,xib最外層是UIView,是以這個時候我們建立一個類,隻要這個類繼承UIView,就可以了

iOS開發系列-九宮格算法-xib

然後修改一下UIView的真實類型:

iOS開發系列-九宮格算法-xib

 此時AppsView就是UIView的真實的類。

這個時候我們就可以拖線了

iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib
iOS開發系列-九宮格算法-xib

好了,我們已經拿到控件在AppsView.m檔案中,此時資料在self.apps裡面,self.apps數組裡面存儲的模型對象,是以我們給AppsView設定一個模型屬性

為什麼我們要設定這個屬性呢?apps是ViewController類中的屬性,那麼我在AppsView類中拿到别的類的屬性呢?這個時候,我們可以把ViewController類中

apps屬性作為參數傳遞到AppsView類中,然後我在AppsView類中設定一個屬性接收它。這個時候我在AppsView類中設定的屬性類型是要和接收的資料的類型是一樣的,是以我們要設定一個AppsModel類型的對象。

iOS開發系列-九宮格算法-xib

現在,AppsView類中有了一個AppsModel類型的 app成員屬性,

iOS開發系列-九宮格算法-xib

這個時候,我們在AppsView類中就可以獲得到資料了,那麼我們最初的目的是給控件添加資料,并不是為app屬性添加資料,那麼接下來要坐什麼呢?

分析: appsView.app = self.apps[i] 這行代碼,點文法這個時候是setter,也就是[appsView setApp:self.apps[i]],這個時候調用的是屬性app的setter方法

現在我寫這句代碼最終的目的是給控件添加資料,控件對應的成員屬性為

iOS開發系列-九宮格算法-xib

我們最終是給imageView 和 nameLable指派, appsView.app = self.apps[i] 這句代碼調用app的setter方法,我們可以在setter方法中給這些控件屬性指派

就是重寫setter方法:

iOS開發系列-九宮格算法-xib

setter方法重寫結束以後,我們再分析 appsView.app = self.apps[i] 這個時候 self.apps[i]就相當于參數,把資料傳遞給控件屬性。

運作程式,看結果

iOS開發系列-九宮格算法-xib

程式結束!

轉載于:https://www.cnblogs.com/xiaobai51/p/5518535.html