美文网首页
16-环信(2)

16-环信(2)

作者: cdd48b9d36e0 | 来源:发表于2017-01-18 01:01 被阅读16次

    0928

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

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

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

    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)

          本文链接:https://www.haomeiwen.com/subject/gryvbttx.html