iOS開發之微信聊天工具欄的封裝

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

  之前山寨了一個新浪微博(iOS開發之山寨版新浪微博小結),這幾天就山寨個微信吧。之前已經把微信的檢視結構簡單的拖了一下(IOS開發之微信山寨版),今天就開始給微信加上具體的實現功能,那麼就先從微信的聊天介面開始吧。提到封裝是少不了寫程式碼的,在封裝元件的時候,為了元件的可移植性,我們就不能用storyboard來拖拽了。為了螢幕的適配,適應不同螢幕的手機,所以在封裝元件的時候是少不了為我們的元件來新增約束。今天部落格中的所有程式碼都是脫離storyboard的,這些程式碼在別的工程中也是可以使用的。好,廢話少說,切入今天的正題。

微信大家基本上都用過,今天要做的就是微信的聊天工具條。聊天工具條還是比較複雜的,其中包括髮送表情,傳送文字,傳送圖片,傳送聲音,拍照等等功能,下面給出傳送錄音,文字,表情的程式碼,其他的和這幾樣類似。還是那句話百字不如一圖,先來幾張效果圖吧。

在封裝聊天工具條的的時候表情鍵盤是之前封裝好的(請參考:“iOS開發之自定義表情鍵盤(元件封裝與自動佈局)”),所以拿過來就可以用的啦。因為不管是工具條還是表情鍵盤都是用約束來控制元件大小的,所以橫屏也是沒問題的,在大屏手機上也是沒問題的。下面將會一步步講解如何封裝下面的聊天工具條。主要是對工具條的封裝,表情鍵盤在這就不做講解了。

一:ToolView預留的介面

在封裝ToolView中主要用到Block回撥,讀者可以根據自己的個人習慣來選擇是Block回撥,還是委託回撥或者是目標動作回撥(筆者更喜歡Block回撥),下面的程式碼是ToolView給呼叫者提供的介面

 

二:初始化ToolView中所需的控制元件

1.為了更好的封裝我們的元件,在.h中預留介面,在ToolView.m的延展中新增我們要使用的元件(私有屬性),延展程式碼如下:

 

2.接受相應的Block回撥,把block傳入ToolView中,程式碼如下:

 

3.控制元件的初始化,純程式碼新增ToolView中要用到的元件(分配記憶體,配置相應的屬性),因為是自定義元件的封裝,所以我們的storyboard就用不上啦,新增控制元件的程式碼如下:

 

4.給我們的控制元件新增相應的約束,為了適合不同的螢幕,所以自動佈局是少不了的。當然啦給控制元件新增約束也必須是手寫程式碼啦,新增約束的程式碼如下:

 

5.因為我們要傳送錄音,所以對音訊部分的初始化是少不了的,以下程式碼是對音訊的初始化

 

6.新增鍵盤迴收鍵Done

 

三.編寫控制元件的回撥方法

控制元件新增好以後下面要新增觸發控制元件要乾的事情:

1.從最複雜的開始,長按傳送錄音的按鈕時,會錄音。鬆開收時會傳送(在傳送時要判斷音訊的時間,太小不允許傳送)。錄音時上滑取消錄音(刪除錄音檔案)。主要是給錄音按鈕加了一個LongPress手勢,根據手勢的狀態來做不同的事情。關於手勢的內容請參考之前的部落格:iOS開發之手勢識別,下面是錄音業務邏輯的實現(個人在Coding的時候,感覺這一塊是工具條中最複雜的部分),程式碼如下:

 

2.下面的程式碼是檢測音量的變化,用於根據音量變化圖片,程式碼如下:

 

3.輕擊輸入框時,切換到系統鍵盤,程式碼如下:

 

4.通過輸入框的文字多少改變toolView的高度,因為輸入框的約束是加在ToolView上的,所以需要把輸入框的ContentSize通過block傳到ToolView的呼叫者上,讓ToolView的父檢視來改變ToolView的高度,從而sendTextView的高度也會隨著改變的,下面的程式碼是把ContentSize交給父檢視:程式碼如下:

效果如下,文字多時TextView的高度也會增大:

 

5.點選最左邊的按鈕觸發的事件(切換文字輸入框和錄音按鈕),程式碼如下:

 

6.點選return傳送文字(通過Block回撥傳入到父檢視上),程式碼如下:

 

7.錄音按鈕本身要做的事情(在LongPress沒有被觸發時呼叫)程式碼如下:

 

8.呼叫表情鍵盤:

 

以上就是ToolView的所有封裝程式碼,至於在Controller中如何使用他來傳送訊息,如何定義聊天Cell,如何處理錄音檔案,聊天時的氣泡是如何實現的等功能,在以後的部落格中會繼續講解,希望大家繼續關注。(轉載請註明出處)

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

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

打賞作者

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

iOS開發之微信聊天工具欄的封裝

相關文章