iOS開發之自定義表情鍵盤(元件封裝與自動佈局)

青玉伏案發表於2015-12-16

下面的東西是編寫自定義的表情鍵盤,話不多說,開門見山吧!下面主要用到的知識有MVC, iOS開發中的自動佈局,自定義元件的封裝與使用,Block回撥,CoreData的使用。有的小夥伴可能會問寫一個自定義表情鍵盤腫麼這麼麻煩?下面將會介紹我們如何用上面提到的東西來定義我們的表情鍵盤。下面的內容會比較多,這篇博文還是比較有料的。

還是那句話寫技術部落格是少不了程式碼的,下面會結合程式碼來回顧一下iOS的知識,本篇博文中用到的知識點在前面的部落格中都能找到相應的內容,本篇算是一個小小的功能整合。先來張圖看一下本app的目錄結構。我是根據自己對MVC的理解來構建的目錄結構,希望起到拋磚引玉的作用,有好的解決方案歡迎評論或者留言指出。Face檔案中存放的時我們的表情圖片,Model檔案封裝的是從sqlite中讀取歷史頭像的元件,View檔案中封裝的時我們自定義的元件,也就是自定義鍵盤相關的檢視,Controller負責將我們的各個元件組裝到一起完成我們想要的功能。下面會一一介紹。

 

上面是檔案的組織結構,下面為了更為直觀的瞭解我們想要的效果,下面先看幾張截圖,來直觀的感受一下執行效果,上面是豎屏的顯示效果,下面是橫屏的顯示效果。因為在封裝自定義鍵盤中用到了自動佈局所以橫屏顯示或者在更大的螢幕上顯示是沒問題的,常用表情是使用者用過的表情,然後存在Sqlite中,顯示時並按時間降序排列。more是用來擴充套件功能用的介面。話不多說,來的程式碼才是實在的。

 

一.View(自定義檢視)

View資料夾下存放的時我們自定義的檢視元件,因為是自定義的元件所以storyboard我們就用不了啦,所有的程式碼都必須手寫,這樣才能保證元件使用的靈活性和減少各個元件之間的耦合性,更利於團隊之間的合作。在封裝元件時要預留好外界可能使用到的介面,和返回該返回的資料。好啦,廢話少說,來點乾貨吧!

1、FaceView元件的封裝:FaceView即負責顯示一個個的頭像。在使用該元件時要傳入要顯示的圖片和圖片對應的文字(如【哈哈】),當點選圖片的時候,會通過block回撥的形式把該圖片的image以及圖片文字返回到使用的元件中去,下面是關鍵程式碼:

FaceView.h中的程式碼如下(下面程式碼是定義啦相應的Block型別和對外的介面):

FaceView.m中的程式碼如下

程式碼說明:

主要就是block回撥的使用,就是封裝了一個自定義的button,具體內容請參考之前的部落格“IOS開發之自定義Button(整合三種回撥模式)

 

2、FunctionView元件的封裝,FunctionView就是使用FaceView元件和ScrollView元件把表情載入進來,在例項化FunctionView元件時,我們用到了自動佈局來設定ScrollView和下面的Button

FunctionView.h的程式碼如下,在.h中留有元件的介面和回撥用的Block, plistFileName用於載入我們的資原始檔時使用,至於如何使用plist檔案,請參考之前的部落格:IOS開發之顯示微博表情

FunctionView.m中的程式碼如下,常用表情是在sqlite中獲取的,而全部表情是通過plist檔案的資訊在Face檔案中載入的:


 

View Code

程式碼說明:

1、主要是通過對資原始檔或者對從資料庫中查詢的資源進行遍歷然後新增到ScrollView中

2.為了適應不同的螢幕給相應的元件新增了約束

 

3.ToolView元件的封裝: ToolView就是在主螢幕上下面的類似於TabBar的東西,當鍵盤出來的時候,ToolView會運動到鍵盤上面的位置。為了使用不同的螢幕,也需要用自動佈局來實現。

ToolView.h的程式碼如下:預留元件介面和宣告block型別


 

 

ToolView.m的程式碼實現:


 

程式碼說明:

主要是對block回撥的應用和給相應的元件新增相應的約束

4.MoreView元件的封裝程式碼就不往上貼啦,和上面的類似,下面是呼叫MoreView元件的執行效果,有興趣的讀者請自行編寫,以上就是檢視部分的程式碼了

二. Mode部分的內容:

1.先定義我們要使用的資料模型,資料模型如下,time是使用表情的時間,用於排序。

2.下面編寫我們的ImageModelClass類,裡面封裝了我們運算元據要用的方法

ImageModelClass.h的程式碼如下,主要是預留的對外的介面:


 

ImageModelClass.m的程式碼如下,主要是用CoreData對sqlite的操作:

程式碼說明:

1.儲存圖片時先查詢圖片是否存在,如果存在則更新時間,如果不存在則插入資料(寫到這感覺想在用Hibernate寫東西)。

 

三.Controller部分,把上面的元件進行組裝

2.在viewDidLoad中進行元件的初始化和實現元件的Block回撥,程式碼如下


 

3.當橫豎螢幕切換時設定自定義鍵盤的高度

4.當鍵盤出來的時候,改變toolView的位置,通過鍵盤的通知來實現。當橫屏的時候鍵盤的座標系和我們當前的Frame的座標系不一樣所以當橫屏時得做一座標系的轉換,程式碼如下;

5.系統鍵盤和自定義鍵盤切換的程式碼如下:

以上就是上面展示效果的核心程式碼了,在做的時候感覺難點在於如何進行螢幕適配,尤其是當螢幕橫過來的時候鍵盤的座標系和我們frame的座標系不同,得做一個轉換。發表部落格的目的是想起到拋磚引玉的作用,有好的東西希望大家相互交流一下。筆者水平有限難免有偏頗之處,歡迎批評指正。

Demo地址:https://github.com/lizelu/WeChat

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

iOS開發之自定義表情鍵盤(元件封裝與自動佈局)

相關文章