一、用HTML實現文字表情混合排列
用HTML實現圖形文字混排的好處就是你不需要考慮表情在文字里面的位置問題,你只需要自己做一個HTML,然后用UIWEBVIEW加載一下,然后再把WENVIEW放到視圖上,顏色字體什么都是可以調節的,但是從內存考慮,聊天一般都用UITableView做最下層的容易,因為內存容易管理,(表會自動釋放),如果是用UISCrollView加載的話,則內存會逐條增加,DEMO階段可以試試。如果用表的話,因為UIWebView加載HTML會有延遲,無論是本地還是網絡,所以在CELL里面放UIWebView刷新表的時候會有閃爍的效果。所以個人覺得HTML來實現的話只適合DEMO階段的糊弄下人,因為UIWebView也是很占資源。(這里我寫了個HTML實現的例子,粗糙表達下意思,用得表我沒有用UISCrollView,用UISCrollView要不停設置contentSize);
封裝HTML的代碼:
[NSString stringWithFormat:@"<body style=background-color: transparent><div style=width:%dpx;word-break:break-all><style>a{text-decoration:none;color:00000}</style>%@ </div></body>",m_pNewLine,string];
類似這樣,但是這個要做循環把所有的表情給轉換成圖片名。麻煩。
http://dl.dbank.com/c0xpfcvxk3
二、用UILabel+UIImageView實現圖文混排
在我看來用這個方法談不上什么好處,但是網上也早流傳這個猥瑣方法的傳說,這個方法實現的基本思想就是對要發送出去的內容做判斷,以表情來做分割,是純文字的就用UIlabel來存放,表情就用UIImageView來進行存放,只要算好他們他們的互相位置就可以,最終把他們放到一個UIView上,然后再加到你要顯示的地方,但是這個判斷還是比較繁瑣的,這個方法我覺得沒什么亮點,但是內存消耗還是比上面的HTML要小,這個倒是真得。切加到表里面也不會有閃爍。(這里我也寫了一個例子,粗糙的將就看看吧。)
這里放一個iphone 實時獲取鍵盤高度的方法;注冊二個鍵盤出來跟退下去的通知。我建議是放在開始編輯和結束編輯里面注冊和remove,這樣不會跟其他同類通知沖突。(這里是取的橫屏的時候鍵盤的高度,所以是取的是寬,)
-(void)adjustkeyboardShowView:(NSNotification *)nofi
{
NSDictionary *info = [nofi userInfo];
NSValue * value ;
value = [info objectForKey:UIKeyboardFrameEndUserInfoKey];
CGSize keyboardEndFrame = [value CGRectValue].size;
int keyheight = keyboardEndFrame.width;
if(keyheight == 352){
}
else if(keyheight ==406) {
}
}
http://dl.dbank.com/c0g0nhmja6
三、用drawRect實現圖形文字的混排
drawRect方法的好處就是內存什么都可以更改,字體的顏色也是可以靈活設置的,而且內存損耗比較小。
drawRect實現的基本思想是,首先你給定的最大換行寬度是多少,然后以這個寬度來分割你輸入的字符,將你分割的字符分別放入一個數組里面,當然不是隨便的放得,取字符的時候要判斷結尾跟開頭的空格,因為在IPHONE里面結尾空格是會自動換行的,同時要判斷結尾是否有表情,加上表情的話寬度是否超過最大的寬度,判斷每一段字符的里面表情的位置和圖片名 也需要保存起來,最后繪制文字和圖片的時候分別用[string drawInRect:CGRectMake(x, y, Width, Heigh) withFont:Font]; [image drawAtPoint:CGPointMake(x,x)];
當然如果你做得一套大小合適的圖片這樣就足夠了,但是如果你的工程需要適應多種字體和表情大小,drawAtPoint 不能縮小圖片,所以我這里寫得還是一個適合多字體多種大小的小例子,(這里仍然得放一個粗糙的小例子,)代碼你們懂的。
http://dl.dbank.com/c0iaxk6gj8
四、three20庫實現圖形文字的混排,
three20庫的實現比較簡單了,three20自己寫了一個TTLABEL,功能類似於UIWebView,也是加載類似於HTML,但是對內存控制的非常牛X,這個我也寫過例子,但是沒弄回來。以后有機會補上吧,不過個人覺得簡單,FACEBOOK的開源庫直接裝了就可以用