16-环信(2)

0928

1. textView让光标回到原位(01.完善聊天输入框)

[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];

2. 让两个控件重叠的快捷方法

16-环信(2)_第1张图片

3. 发送语音时候的录音(03.播放语音)

  1. 环信数据库后台录音的时候是wav音频文件,然后他进行了压缩,生成一个新的amr音频文件,再把原来的wav文件删了
  2. 方法返回值是不可变类型,但是在该方法里定义的时候是可变类型,这时候只需要加是copy就行,比如
-(NSAttributedString *)voiceAtt{
    // 创建一个可变的富文本
    NSMutableAttributedString *voiceAttM = [[NSMutableAttributedString alloc] init];
   ...... 
    return [voiceAttM copy];
}
  1. 富文本拼接图片和文字
        NSMutableAttributedString *voiceAttM = [[NSMutableAttributedString alloc] init];
        // 1.1接收方的语音图片
        UIImage *receiverImg = [UIImage imageNamed:@"chat_receiver_audio_playing_full"];
        
        // 1.2创建图片附件
        NSTextAttachment *imgAttachment = [[NSTextAttachment alloc] init];
        imgAttachment.image = receiverImg;
        //小技巧:这里-7要自己调整,让图片和文字居中对齐
        imgAttachment.bounds = CGRectMake(0, -7, 30, 30);
        // 1.3图片富文本
        NSAttributedString *imgAtt = [NSAttributedString attributedStringWithAttachment:imgAttachment];
        [voiceAttM appendAttributedString:imgAtt];
        
        // 1.4.创建时间富文本
        // 获取时间
        EMVoiceMessageBody *voiceBody = self.message.messageBodies[0];
        NSInteger duration = voiceBody.duration;
        NSString *timeStr = [NSString stringWithFormat:@"%ld'",duration];
        NSAttributedString *timeAtt = [[NSAttributedString alloc] initWithString:timeStr];
        [voiceAttM appendAttributedString:timeAtt];
  1. 播放语音策略
    语音消息体有两个字符串属性,一个代表本地路径,一个代表服务器路径,播放的时候先判断本地路径是否存在,不存在再用服务器路径

4. UIlabel用富文本的图片方法把尺寸撑大(04.发送图片显示图片)

    // 获取图片消息体
    EMImageMessageBody *imgBody = self.message.messageBodies[0];
    CGRect thumbnailFrm = (CGRect){0,0,imgBody.thumbnailSize};
    
    // 设置Label的尺寸足够显示UIImageView(这里富文本图片只是起个占位的作用)
    NSTextAttachment *imgAttach = [[NSTextAttachment alloc] init];
    imgAttach.bounds = thumbnailFrm;
    NSAttributedString *imgAtt = [NSAttributedString attributedStringWithAttachment:imgAttach];
    self.messageLabel.attributedText = imgAtt;

5. 检测路径文件存在和sdwebImage加载本地图片和网络图片(04.发送图片显示图片)

    NSFileManager *manager = [NSFileManager defaultManager];
    // 如果本地图片存在,直接从本地显示图片
    UIImage *palceImg = [UIImage imageNamed:@"downloading"];
    if ([manager fileExistsAtPath:imgBody.thumbnailLocalPath]) {
#warning 本地路径使用fileURLWithPath方法
        [chatImgView sd_setImageWithURL:[NSURL fileURLWithPath:imgBody.thumbnailLocalPath] placeholderImage:palceImg];
    }else{
        // 如果本地图片不存,从网络加载图片
        [chatImgView sd_setImageWithURL:[NSURL URLWithString:imgBody.thumbnailRemotePath] placeholderImage:palceImg];
    }

6. 聊天界面注意要点两则(05.显示时间的cell)

  1. cell重用的时候要移除图片
  2. 聊天的tableview拖拽的时候要停止语音的播放和动画

7. 未读消息和历史会话列表(07.显示历史会话记录)

  1. 未读消息的数据跟数据源数组无关,是由后台返回的一个通知的数字,环信这里直接调用代理就行了
  2. 更新会话列表也是调用环信提供的代理方法,但是要重新对数据源数组进行赋值然后刷新表格

你可能感兴趣的:(16-环信(2))