IOS图文混排
我们从新浪微博拉回来的文本数据往往是包含有表情的,但表情是以[嘻嘻][哈哈]的形式返回。我们在显示的时候就必须要想办法把这些表情显示回来,实现图文混排。
基本上可以从网上找到几种方案。比如说转换成html再用webview显示,但这样据说会因为webview加载耗时导致滑TableView时的闪烁。或者猥琐的使用UILabel+UIImage实现。那本文推崇的是使用DrawRect方法,一个UIView的子类可以继承此方法进行自定义绘制试图。有两个很好用的函数:
[string drawInRect: withFont:]; //在一矩形中绘制该string
[image drawInRect:]; //在一矩形中绘制该image
一,解析文本。
第一步要先对原文本进行解析,使其分割成一段文字,一段表情文本。比如 “你好,我是小明[哈哈]!请多多指教!” 这段文本就要先被砍成 ”你好,我是小明“ ,”[哈哈]","!请多多指教!“这三段,并保存在一个数组中,待接下来绘制用。
那如何解析呢?用正则当然可以,但也可以玩一些字符游戏。
比如[string rangeOfString:@"["],就可以知道符号[出现在string中的哪个位置。
再善用NSString的 substringWithRange(range中间的串,不包括边界) ,substringToIndex(index前的串,不包括index),substringFromIndex(包括index)就可以完成分割啦。
二,绘制。
绘制的时候就使用开篇时讲的那两个方法,对上一步得到的数组一个个绘制。
要注意的地方是跟踪当前绘制的光标坐标(x,y),即当前绘制的小矩形的origine。这个工作就是手动控制好换行啦!
文本段是一个一个字进行drawInRect的。

浙公网安备 33010602011771号