仿微信聊天界面小項目總結


      從開始學習ios時,做這個小項目就卡了很久,到現在這個小項目算是我做的比較熟練的一個了,大概模型做出來了,做的比較粗糙,看起來挺挫的,呵呵。oc和swift兩個版本都順利完成了。因此總結一下曾經在這個小項目中遇到的種種問題!

      效果圖:

      微信聊天界面主要內容有五部分構成:

      1.TableView部分,設置好各種必須的代理;

      2.TableViewCell部分,在自定義cell中要設置好三個控件的位置,這也是整個過程中最麻煩的部分;

      3.設置TextField部分發送消息時,界面消息的刷新和TextField代理的設置。

      4.設置ejabberd服務器。

      5.通過xmpp實現通信。

      第一部分:

      主要設置TableView的必備代理;

      cell的高度,section的數量,rownumber的數量,cell這幾個簡單的設置。需要注意的是:在設置單元格高度的時候需要計算出每次聊天內容的長度,通過聊天內容的高度來動態計算cell的高度。

      第二部分:

      在聊天過程中,由於兩個人的頭像和對話框在界面的兩邊,因此需要判斷朋友和自己的不同位置。

       

      在cell中主要設置三個控件的位置-->[頭像(UIImageView),聊天氣泡(UIImageView),聊天文字(UILabel)],通過動態計算各自控件的frame。

      頭像的大小固定設置,注意:聊天內容和氣泡的大小,主要通過計算輸入文字的長度,這個size的大小通過這個方法:

#define talkMax 200
@implementation UILabel (Resize)
-(CGSize)Resize:(NSString *)message{
    NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:17]};
    CGSize size = [message boundingRectWithSize:CGSizeMake(talkMax, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:attribute context:nil].size;
    return size;
}

      其次需要注意的是:氣泡圖片的如果按照原圖設計會失真,因此通過類別為UIImage添加一個新方法:

-(UIImage *)Resize:(UIImage *)image{
    float top = image.size.width * 0.6;
    float buttom = image.size.width * 0.5;
    float avar = image.size.width * 0.5;
    return [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, avar, buttom, avar) resizingMode:UIImageResizingModeStretch];
}

      第三部分:

      自己消息的發送通過textfield的代理來推送實現,在nsmutablearray中添加新數據,並更新tableview數據。

      由於每次編輯聊天內容時都會彈出鍵盤,遮住textfield,我們通過一個kvo廣播來得到鍵盤的高度和彈出動畫時間,然后加一個動畫效果來實現鍵盤和textfield一起移動。具體實現在鍵盤高度設定那篇隨筆中有詳細描述。

     第四部分:

     ejabberd虛擬服務器的配置,只需要設置好自己的用戶域名,添加一些好友進去就可以實現。好友的聊天客戶端通過mac自帶的Imessage或者Aduim添加一個ejabberd賬戶就可以了。

     注:在使用ejabberd服務器時,登錄頁面並輸入用戶名和密碼后並未出現登錄頁,不知道是否瀏覽器問題,需要再次start一次ejabberd,便可登錄了。

     第五部分:

     使用xmpp來實現消息的收發和好友狀態的改變,以及用戶登錄。

     在xmpp簡單介紹中有詳細使用方法。

     以上各點就是我在做這個小項目的過程中遇到的一些小問題。

          

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM