16-环信(2)
2017-01-18 本文已影响16人
cdd48b9d36e0
0928
1. textView让光标回到原位(01.完善聊天输入框)
[textView setContentOffset:CGPointZero animated:YES];
[textView scrollRangeToVisible:textView.selectedRange];
2. 让两个控件重叠的快捷方法
3. 发送语音时候的录音(03.播放语音)
- 环信数据库后台录音的时候是wav音频文件,然后他进行了压缩,生成一个新的amr音频文件,再把原来的wav文件删了
- 方法返回值是不可变类型,但是在该方法里定义的时候是可变类型,这时候只需要加是copy就行,比如
-(NSAttributedString *)voiceAtt{
// 创建一个可变的富文本
NSMutableAttributedString *voiceAttM = [[NSMutableAttributedString alloc] init];
......
return [voiceAttM copy];
}
- 富文本拼接图片和文字
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];
- 播放语音策略
语音消息体有两个字符串属性,一个代表本地路径,一个代表服务器路径,播放的时候先判断本地路径是否存在,不存在再用服务器路径
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)
- cell重用的时候要移除图片
- 聊天的tableview拖拽的时候要停止语音的播放和动画
7. 未读消息和历史会话列表(07.显示历史会话记录)
- 未读消息的数据跟数据源数组无关,是由后台返回的一个通知的数字,环信这里直接调用代理就行了
- 更新会话列表也是调用环信提供的代理方法,但是要重新对数据源数组进行赋值然后刷新表格