zoukankan      html  css  js  c++  java
  • 仿微信聊天界面小项目总结

          从开始学习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简单介绍中有详细使用方法。

         以上各点就是我在做这个小项目的过程中遇到的一些小问题。

              

  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/moxuexiaotong/p/4823090.html
Copyright © 2011-2022 走看看