iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片
Label借助富文本显示图片
1.即时通讯项目中语音消息UI的实现,样式如图:

- 借助富文本在UILabel中显示图片和文字
// 1.创建一个可变的富文本
NSMutableAttributedString *voiceAttr = [[NSMutableAttributedString alloc] init];
if ([self.reuseIdentifier isEqualToString:@"receiveCell"]) { // 接收方的label:图片 + 时间
// 2.创建图片富文本附件
NSTextAttachment *imageAttachment = [[NSTextAttachment alloc] init];
UIImage *voiceImage = [UIImage imageNamed:@"chat_receiver_audio_playing_full"];
// 2.1指定富文本附件的图片
imageAttachment.image = voiceImage;
// 2.2设置图片的frame,-7是为了图片和文字横向对齐一点
imageAttachment.bounds = CGRectMake(0, -7, 30, 30);
// 2.3将图片富文本附件添加到富文本中
NSAttributedString *imgAttr = [NSAttributedString attributedStringWithAttachment:imageAttachment];
// 3.将图片富文本添加到可变的富文本中
[voiceAttr appendAttributedString:imgAttr];
// 4.创建时间文字的富文本
EMVoiceMessageBody *voiceBody = [message.messageBodies firstObject];
NSInteger time = voiceBody.duration;
NSAttributedString *timeAtt = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@" %ld″",time]];
[voiceAttr appendAttributedString:timeAtt];
} else { // 发送方的label: 时间 + 图片
// 4.创建时间文字的富文本
EMVoiceMessageBody *voiceBody = [message.messageBodies firstObject];
NSInteger time = voiceBody.duration;
NSAttributedString *timeAtt = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld″ ",time]];
[voiceAttr appendAttributedString:timeAtt];
// 2.创建图片富文本
NSTextAttachment *imageAttachment = [[NSTextAttachment alloc] init];
UIImage *voiceImage = [UIImage imageNamed:@"chat_sender_audio_playing_full"];
imageAttachment.image = voiceImage;
imageAttachment.bounds = CGRectMake(self.msgLabel.bounds.size.width - 30, -7, 30, 30);
NSAttributedString *imgAttr = [NSAttributedString attributedStringWithAttachment:imageAttachment];
// 3.将图片富文本添加到可变的富文本中
[voiceAttr appendAttributedString:imgAttr];
}
2.即时通讯发送图片 -- 在UILabel中添加了UIImageView,虽然设置了UILabel的尺寸,但是并没有什么卵用.UILabel尺寸没变,图片也显示的不全


- 使用富文本当做占位符的作用,先将UILabel撑到显示图片的大小
- 最后将UIImageView添加到UILabel中问题就解决了
EMImageMessageBody *imageBody = [self.message.messageBodies firstObject];
// 1.给label设置富文本,目的:占位,将label撑大,足够显示缩略图
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.bounds = (CGRect){0, 0, imageBody.thumbnailSize};
// 2.给label添加富文本
self.msgLabel.attributedText = [NSAttributedString attributedStringWithAttachment:attachment];
// 3.将UIImageView添加到UILabel中
[self.msgLabel addSubview:self.msgImageView];
NSString *path;
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:[imageBody thumbnailLocalPath]]) { // 本地有图片的情况
path = imageBody.thumbnailLocalPath;
[self.msgImageView sd_setImageWithURL:[NSURL fileURLWithPath:path] placeholderImage:nil];
} else { // 本地没有图片的情况
path = imageBody.thumbnailRemotePath;
[self.msgImageView sd_setImageWithURL:[NSURL URLWithString:path] placeholderImage:nil];
}
// 4.设置图片的位置与尺寸
self.msgImageView.frame = (CGRect){0, 0, imageBody.thumbnailSize};
iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片的更多相关文章
- iOS开发小技巧--即时通讯项目:消息发送框(UITextView)高度的变化; 以及UITextView光标复位的小技巧
1.即时通讯项目中输入框(UITextView)跟随输入文字的增多,高度变化的实现 最主要的方法就是监听UITextView的文字变化的方法- (void)textViewDidChange:(UIT ...
- iOS开发小技巧 - runtime适配字体
iOS开发小技巧 - runtime适配字体 版权声明:本文为博主原创文章,未经博主允许不得转载,有问题可联系博主Email: liuyongjiesail@icloud.com 一个iOS开发项目无 ...
- iOS开发小技巧 - UILabel添加中划线
iOS开发小技巧 遇到的问题: 给Label添加中划线,然后并没有效果 NSString *str = [NSString stringWithFormat:@"合计金额 ¥%.2f&quo ...
- iOS开发融云即时通讯集成详细步骤
1.融云即时通讯iOS SDK下载地址 http://rongcloud.cn/downloads 选择iOS SDK下载 2.进行应用开发之前,需要先在融云开发者平台创建应用,如果您已经注 ...
- 【转】IOS开发小技巧
1,Search Bar 怎样去掉背景的颜色(storyboard里只能设置background颜色,可是发现clear Color无法使用). 其实在代码里还是可以设置的,那就是删除背景view [ ...
- iOS开发小技巧 -- tableView-section圆角边框解决方案
[iOS开发]tableView-section圆角边框解决方案 tableView圆角边框解决方案 iOS 7之前,图下圆角边框很容易设置 iOS 7之后,tableviewcell的风格不再是圆角 ...
- ios开发小技巧之提示音播放与震动
在ios开发中,有时候我们需要频繁播放某种提示声音,比如微博刷新提示音.QQ消息提示音等,对于这些短小且需要频繁播放的音频,最好将其加入到系统声音(system sound)里. 注意: 需要播放的音 ...
- iOS开发小技巧--微博项目中的键盘工具条
微博项目中的键盘工具条 项目中的键盘工具条不能使用inputAccessoryView,因为inputAccessoryView不能实现键盘隐藏的时候,工具条还显示在眼前,如图: 所以,果断决定将工具 ...
- iOS开发小技巧--适当的清空模型中的某个数据,达到自己的需求,记得最后将数据还原(百思项目评论页面处理最热评论)
一.项目需求,显示所有贴的时候,需要显示最热评论,但是点击进入相应帖子后,最热评论的label不要显示,如图: 解决方案 -- 该暂时保存的暂时保存,该清空的清空 ...
随机推荐
- POJ1160 Post Office[序列DP]
Post Office Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18680 Accepted: 10075 Des ...
- java中“@Deprecated”的意思
例如:Java内在的File类中有如下方法 @Deprecatedpublic URL toURL() throws MalformedURLException {return new URL(&qu ...
- c# winforms TextBox的记忆功能
c# winforms TextBox的记忆功能 1:在项目上点右键 sproperties-settings 添加项目 如 MyText 类型 String 2: 获取值: string l ...
- Maven系列三Maven内置变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
- java io (一)
对于文件内容的操作主要分为两大类 分别是:字符流 字节流 其中,字符流有两个抽象类:Writer Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 Buffe ...
- Java线上应用故障排查之二:高内存占用
搞Java开发的,经常会碰到下面两种异常: 1.java.lang.OutOfMemoryError: PermGen space 2.java.lang.OutOfMemoryError: Java ...
- java 28 - 5 JDK5的新特性 之 枚举的使用
上一章,自定义了枚举类,超级麻烦.. 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是E ...
- 学习CSS的瓶颈
何为学习瓶颈 学习到了一定的阶段,就很难继续提高水平的一种现象 这是很多人都正面对的,但同时自己并未意识到. 既然是瓶颈,那么一旦突破了,就是广阔天空! 你是否经常面对这样的情景: 遇到一个奇葩问题, ...
- nginx反向代理tomcat访问时浏览器加载失败,出现 ERR_CONTENT_LENGTH_MISMATCH 问题
问题说明:测试机上部署了一套业务环境,nginx反向代理tomcat,在访问时长时间处于加载中,十分缓慢! 通过浏览器调试(F12键->Console),发现有错误ERR_CONTENT_LEN ...
- X200s,Debian 8(Jessie) 安装流水帐
1. U盘启动安装 a. 因为无线网卡驱动是non-free,需要另外下载,对应X200s,文件是iwlwifi-5000-5.ucode,下完放到安装U盘的根目录下,安装时就不会再提示而是直接安装 ...