iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路

首先,楼主所在的公司只有楼主一个iOS开发,在代码规范上大神们也许会反感,请多包涵。我会不断改进。


一、关于UI页面实现

 1) 整体是UITableView,自定义Cell。气泡用的图片局部拉伸,代码如下.  

        //UIImageResizingModeStretch:拉伸模式,通过拉伸UIEdgeInsets指定的矩形区域来填充图片

        //UIImageResizingModeTile:平铺模式,通过重复显示UIEdgeInsets指定的矩形区域来填充图

        UIImage *iconImage = [UIImage imageNamed:img];

        CGFloat w = iconImage.size.width;

        CGFloat h = iconImage.size.height;

        UIImage *newImage = [iconImage resizableImageWithCapInsets:UIEdgeInsetsMake(h * 0.5, w * 0.5, h * 0.5, w * 0.5) resizingMode:UIImageResizingModeStretch];

  2)输入框的键盘跟随实现思路


      //计算需要移动的距离

      NSDictionary *dict = notification.userInfo ;

      CGRect keyBoardFrame =  [[dict objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];

      CGFloat keyboardY = keyBoardFrame.origin.y;

      CGFloat translationY = keyboardY - self.view.frame.size.height;

      //动画执行时间

      CGFloat time = [[dict objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue];


      //键盘弹出的节奏和view动画节奏一致:7 << 16

      [UIView animateKeyframesWithDuration:time delay:0.0 options:7 << 16 animations:^{

      self.view.transform = CGAffineTransformMakeTranslation(0, translationY);

      } completion:^(BOOL finished) {


      }];


二、关于容联云IM SDK(我只拿发送接收文字消息进行说明)

 为了节省成本我们没有用它消息存储的功能,自己在发送消息的同时调用我们的接口添加到自己的服务器,读取历史小时的时候倒序输出即可

 1)发送文字消息(不多说,容联云的开发文档有,这里仅提供关键部分)


      ECTextMessageBody *messageBody = [[ECTextMessageBody alloc] initWithText:strText];

      ECMessage *message = [[ECMessage alloc] initWithReceiver:strJoin body:messageBody];

      [[ECDevice sharedInstance].messageManager sendMessage:message progress:nil completion:^(ECError *error,ECMessage *amessage) {

     }];


  2)文字消息发送成功之后UI的变化

      因为容联云无论发送还是接收的消息都是只读型,所以我们需要包装,比如发送和接收文字的高度,从而确定Cell的高度,代码如下


      MessageFrameModel *mf = [[MessageFrameModel alloc] init];

      mf.strGetTimeFromService = strTime;

      mf.hiddenTime = isShowTime;

      NSString *strJoin = [NSString stringWithFormat:@"company_%@",[UserModel shareUserModel].userId];

      mf.messageFrom = strJoin;//确定是发送方还是接收方从而判断UI的显示类型

      mf.messgeType = @"1";

      mf.message = message;


      //计算文字的代码:

      //font 字体 maxSize容器的大小

      -(CGSize) sizeWithFont:(UIFont *) font maxSize:(CGSize) maxSize

      {

      NSDictionary *dict  = @{NSFontAttributeName: font};

      CGSize textSize = [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;

      return  textSize;

      }


3)接收消息

     容联云提供一个单例,SDK配置好之后接收到的所有消息都会先到这个单例里DeviceDelegateHelper

     接收到消息的同时向正在聊天的页面发送通知,通知内容是消息体

     当正在聊天页接收到通知时再次进行消息包装,添加到数组刷新页面进行显示。


4)补充说明

    项目聊天的功能我只用两周的时间,也许有更简洁的方法,不过当时用容联云SDK自带的聊天页面实在太low,所以才会自己写聊天页面。聊天UI的代码已经上传GitHub请您自行下载,如果对您有微薄的帮助还希望您给个星星,鼓励一下楼主的处女作。

demo下载地址

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 这种方法已被淘汰。推荐使用AutoLayout,简单粗暴。这里有个总结,写的很好。 介绍这几天正在做一个AppDe...
    苏宇lovecc阅读 1,832评论 2 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,036评论 1 32
  • 前言: 上一次分享了融云的集成和使用,基本上满足了大众需求和微脉项目中的要求。但是小编私下没有偷懒,一直在探索更多...
    不一样的色彩阅读 8,903评论 15 13
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 3,558评论 2 7