<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          zychatiOS 碼農(nóng)聊天室

          聯(lián)合創(chuàng)作 · 2023-09-27 14:14

          ZYChat

          (一) 是一個實戰(zhàn)項目的聊天UI框架,針對高頻次高速率刷新最近會話列表和實際對話頁面做了緩沖優(yōu)化,經(jīng)過測試會話使用的性能和體驗非常穩(wěn)定。

          (二) UI框架參考MVVM思想設(shè)計,并采用自身總結(jié)的一些常用設(shè)計模式,可以幫助你快速實現(xiàn)搭建多樣式的列表頁面,代碼復(fù)用率可以有穩(wěn)定的提升。

          (三) ZYChat-EaseMob 是基于環(huán)信的UI項目應(yīng)用實戰(zhàn),將ZYChat類庫和實際項目使用結(jié)合。

          項目運行截圖

           

          項目代碼結(jié)構(gòu)圖

           

          項目核心模塊注釋

          ChatDetail  具體聊天

          *Resource 用到的圖片  *UITableViewCell 聊天所有的cell使用

          *Base      聊天內(nèi)容基類Cell,負(fù)責(zé)分發(fā)類型
          
          *ChatCell  聊天內(nèi)容Cell,    負(fù)責(zé)處理聊天類型的消息展示
          
            *GJGCChatFriendBaseCell , 基礎(chǔ)內(nèi)容Cell,包含消息顯示的:頭像,昵稱(根據(jù)會話類型顯示隱藏),氣泡,狀態(tài)
          
            *GJGCChatFriendTextMessageCell, 文本內(nèi)容顯示
          
            *GJGCChatFriendImageMessageCell, 圖片內(nèi)容顯示
          
            *GJGCChatFriendAudioMessageCell, 語音內(nèi)容顯示
          
            *GJGCChatFriendTimeCell, 時間塊顯示
          
          *SystemNoti 系統(tǒng)消息Cell,   負(fù)責(zé)展示系統(tǒng)消息

          *View 聊天時候用到的自定義視圖和風(fēng)格控制

          *GJGCCommonFontColorStyle 全局風(fēng)格控制
          
          *GJGCCommonHeadView 全局頭像顯示
          
          *GJGCChatContentEmojiParser 文本解析成圖文內(nèi)容
          
          *GJGCRefreshHeader 下拉刷新
          
          *GJGCRefreshFooter 上拉加載
          
          *GJGCLoadingStatusHUD 加載HUD,基類初始化,全局可用

          *ViewController

          *Base 基礎(chǔ)類,負(fù)責(zé)分發(fā) 系統(tǒng)消息或者對話消息類型
          
          *MessageExtend 消息類型擴(kuò)展,基于環(huán)信的消息ext字段來擴(kuò)展消息,以支持gif等更多類型消息
          
          *Friend 單聊會話,群聊本質(zhì)上也是1v1會話,只是有一些特殊邏輯需要單獨處理,為了避免龐大的DataManager和ViewController,需要分開
          
          *GifLoadManager 本地Gif包管理
          
          *Group 群聊管理
          
          *SystemAssist 系統(tǒng)消息管理

          RecentChat 最近會話

          *GJGCRecentChatViewController  視圖管理層  *GJGCRecentChatCell            單行會話展示  *GJGCRecentChatModel           內(nèi)容模型  *GJGCRecentChatDataManager     模型管理層  *GJGCRecentChatStyle           風(fēng)格管理  *GJGCRecentChatTitleView       服務(wù)器連接狀態(tài)展示

          Square  廣場

          *CreateGroup  創(chuàng)建群組  *PublicGroup  廣場群組列表

          GroupCommonUI  群組資料和個人資料展示

          *GJGCGroupInformationViewController 群組資料展示  *GJGCPersonInformationViewController 個人資料展示

          如何擴(kuò)展消息類型

          擴(kuò)展消息類型需要做三件事情

          1. 繼承GJGCChatFriendBaseCell 來擴(kuò)展對話消息

          2. GJGCChatFriendConstans 在關(guān)系綁定中將內(nèi)容類型和新擴(kuò)展的消息類型綁定

          3. 在創(chuàng)建內(nèi)容模型的時候,將內(nèi)容類型設(shè)置為新創(chuàng)建的內(nèi)容類型即可綁定

          例子

          *首先創(chuàng)建內(nèi)容展示的樣子,GJGCCHatFriendGifCell *在內(nèi)容模型中定義        gifLocalId , 在 GJGCChatFriendConstans 中定義內(nèi)容類型 GJGCChatFriendContentTypeGif

          • 在GJGCChatFriendConstans 實現(xiàn) ContentType 和 Cell的綁定 *在創(chuàng)建GJGCChatFriendContentModel的時候?qū)?nèi)容設(shè)置為GJGCChatFriendContentTypeGif就可以實現(xiàn)加載對應(yīng)的gifCell

          如何基于環(huán)信的消息擴(kuò)展字段配合GJGCMessageExtendModel實現(xiàn)擴(kuò)展消息類型的目的

          *userInfo : 用戶信息,始終從消息中帶過去,根據(jù)App情況,也可以不用傳過去節(jié)省流量,這里我們是沒有服務(wù)器,所以傳過去

          *data:   擴(kuò)展消息的內(nèi)容,看一下我們定義的一些常量key,對應(yīng)的我們可以把需要擴(kuò)展的內(nèi)容填充

          *message_type: 擴(kuò)展的消息類型,類似常規(guī)時候的 text,gif,voice這些類型的定義方式

          *is_message_extend: 是否是消息擴(kuò)展,當(dāng)不是擴(kuò)展消息的時候,我們只讀用戶擴(kuò)展信息userInfo就可以了

          *display_text: 擴(kuò)展消息應(yīng)該展示的文本,如果對方源碼不支持此擴(kuò)展消息,相應(yīng)這個文本會有變化

          *is_support_display: 根據(jù)雙方本地的內(nèi)容協(xié)議支持來確定,是否支持正常顯示這條擴(kuò)展消息

          工具類庫注釋 (Dependcy)

          *Base64   用于壓縮編碼字符串,在群信息壓縮的環(huán)節(jié)使用

          *EaseMob  環(huán)信聊天服務(wù)SDK

          *fmdb     最好用的Sqlite,在上面做了一層簡單的封裝,支持對象化CURD操作

          *GJCFCachePathMananger 應(yīng)用層全局的緩存目錄管理

          *GJCUProgressView 自定義的一個進(jìn)度展示

          *SDWebImage   最好用的圖片緩存庫,目前基本全部使用此類庫來加載圖片

          *JSONModel    實測使用最穩(wěn)定的Json轉(zhuǎn)模型,很好的自定義擴(kuò)展,在項目中Json與模型轉(zhuǎn)化和生成都運用到了

          *GJCURoundCornerView 取自另一個作者的一個控件,可以自定義四個角的圓角和試圖的bord情況

          *GJCUCapture  根據(jù)Apple的AVCapture Demo 自定義的一個拍照的組件,母的是解決iOS7.0 iPhone4,5下的拍照黑屏問題

          *GJGCChatInputPnael  項目中對話使用的聊天輸入控制面板

          *AFNetworking  最好用的網(wǎng)絡(luò)庫

          *AudioCoder    語音編碼庫,公開的

          *DownloadManager 任務(wù)化下載組件

          *FileUploadManager 任務(wù)化上傳組件

          *FLAnimateImage  用于Gif表情展示

          *GJCFAssetsPicker 自定義圖片選擇

          *GJCFAuidoManager 播放和錄音

          *GJCFCoreText     自定義圖文混排組件

          *GJCFUitils       常用工具函數(shù)

          *GJCUAsyncImageView 自定義異步圖片加載,不是非常穩(wěn)定,目前底層全部改成SDWebImage加載

          *GJCUImageBrowase 大圖瀏覽組件

          為什么做這個聊天室?

          大家都在做App,可能各種需求,各種蛋疼的坑,老板說,我們就是要有個IM消息服務(wù),但是還得能自己定義,那么OK,我們的目標(biāo)來了,誰來寫呢, 再寫一遍,很麻煩,別的項目什么 XX仿QQ效果,XX仿微信效果,這些都沒法解決問題,它們就是個效果,甚至沒經(jīng)過測試,ZYChat經(jīng)過對話詳情頁瘋狂對發(fā)消息測試,沒有任何問題,所 以,我們要得是一個真實的對話聊天項目,并且它是開源的,大家都可以來做一些自己想做的擴(kuò)展,我們需要關(guān)心的就是,我們要做的是什么,如何使用它,節(jié)省我 們的時間。所以,ZYChat-EaseMob就誕生了。

          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91福利视频在线观看 | 一级特黄BBBBBB视频免费观看 | 亚洲中文字幕的 | 欧美成人手机免费在线观看 | 天天日天天操天天射 |