關(guān)于自定義聊天功能(理論篇)

先上效果圖


實現(xiàn)的功能,

發(fā)送文字,發(fā)送系統(tǒng)的emoji,發(fā)送圖片,發(fā)送語音,消息的重發(fā)。

控件封裝思路

整體采用MVVM框架封裝。

UI相關(guān):UI布局上現(xiàn)階段需求,只使用一個Cell,然后給不同類型消息(例如文字和圖片)寫2個不同View,Model,和ViewModel。

網(wǎng)絡(luò)相關(guān):環(huán)信完全獨立封裝起來,提供一個封裝好后的一個文件,只有這個文件能訪問環(huán)信的方法和監(jiān)聽環(huán)信的回調(diào)。然后對外暴露發(fā)送消息方法和接受消息的方法。

鍵盤相關(guān):鍵盤中包含文字,emoji,錄音頻,更多功能(先包括相機和相冊)4個模塊。

緩存相關(guān):采用FMDB把接受到的消息和發(fā)送的消息存入數(shù)據(jù)庫中來保存。每一個對話組創(chuàng)建一個表。

涉及到的技術(shù)難點:

1.當(dāng)一個cell中顯示過多的emoji表情,界面會卡頓。

2.每條消息都需要點擊,長按,雙擊等手勢。所以需要很好的,靈活的劃分各自的點擊區(qū)域,

3.鍵盤高度需要根據(jù)數(shù)據(jù)的內(nèi)容去改變高度,粘貼時需要額外的處理。

4.錄音頻時如果實現(xiàn)代理方法audioRecorderDidFinishRecording會自動切換到主線程,造成UI卡頓的情況。

5.緩存數(shù)據(jù)的寫入和讀取的數(shù)據(jù)問題。

6.發(fā)送消息后需要刷新UI來改變當(dāng)前消息的狀態(tài),如果直接reload會造成浪費和卡頓。所以需要獲取當(dāng)前UI上已經(jīng)顯示的數(shù)組,遍歷這個數(shù)組,獲取到這些數(shù)組中處于loading狀態(tài)的數(shù)據(jù)的行數(shù),按照這個行數(shù)刷新UI。

7.在氣泡中的文字需要實現(xiàn)手機號,網(wǎng)頁地址的辨認(rèn)。AppleSDK識別文本中URL不太精確,需要自己提供正則式。

然后如果有人需要代碼和其他疑惑請留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 2017.02.22 可以練習(xí),每當(dāng)這個時候,腦袋就犯困,我這腦袋真是神奇呀,一說讓你做事情,你就犯困,你可不要太...
    Carden閱讀 1,490評論 0 1
  • 最喜歡的還是始和劍崎,其實一開始還沒有發(fā)現(xiàn)劍始這么好吃,雖然結(jié)局不盡如人意,也明白這是假面騎士的悲情使然。 命運?...
    夜夜生哥閱讀 155評論 0 0
  • hello 大家好,我是袁曉鬧,不知道在聽過我第一期節(jié)目之后,還有多少人愿意再次點開我的博客,非常感謝能繼續(xù)堅持聽...
    傻了吧唧袁曉鬧閱讀 385評論 0 0
  • 說起芝麻醬,最初是在火鍋店涮肉涮菜時吃到的,這醬的味道,真是不能忘懷,此后在家吃火鍋,吃面都少不了它。而且芝麻醬含...
    邂逅若水閱讀 417評論 2 3
  • 在c++語言中實現(xiàn)與硬件的通訊,需要通過串口,串口可以讀取對應(yīng)硬件模塊如:板卡等發(fā)出來的通信協(xié)議(波特率、選...
    歲月靜好歲月如昔閱讀 2,173評論 0 1

友情鏈接更多精彩內(nèi)容