iOS開發之顯示微博表情

青玉伏案發表於2015-12-15

  在上一篇部落格中山寨了一下新浪微博,在之後的部落格中會對上一篇程式碼進行優化和重用,上一篇的微博請求的文字中有一些表情沒做處理,比如帶有表情的文字是這樣的“我要[大笑],[得意]”。顯示的就是請求的字串,那麼我們如何把文字在本地轉換成表情呢?下面將要說一下顯示錶情的解決方案。

要用到的知識:IOS開發中的資原始檔.plist, 可變的屬性字串,TextView和正規表示式的使用。

解決的整體思路:把源字串同過正則匹配獲取到每個表情的range, 再通過range獲取元字串中的表情字串,如[哈哈], 在把[哈哈] 和我們.plist中item下的chs欄位匹配,然後獲取對應的圖片名,獲取圖片後把圖片轉換成可變字串的附件,然後做一個替換即可。先這麼大致一說,下面會詳細的講解一下。

1.要想在我們手機上顯示網路請求的表情,首先我們本地得有相應的資原始檔,在.plist檔案中又我們想要的東西,其中儲存的東西如下所示,整個root是一個陣列,陣列中的item是一個字典,字典中存放的時文字到圖片名的一個對映,當然啦,圖片名和我們本地資源的圖片名相同。截圖如下

2.如何從.plist檔案中獲取資料呢?先通過bundle獲取資原始檔的路徑,在通過檔案路徑建立陣列,陣列中儲存的資料就是檔案中的內容程式碼如下:

 

3.生成我們的測試字串,最後一個不是任何表情,不做替換。

 

4.把上面的str轉換為可變的屬性字串,因為我們要用可變的屬性字串在TextView上顯示我們的表情圖片,轉換程式碼如下:

 

5.進行正則匹配,獲取每個表情在字串中的範圍,下面的正規表示式會匹配[/*],所以[123567]也會被匹配上,下面我們會做相應的處理

 

6.資料準備工作完成,下面開始遍歷資原始檔找到文字對應的圖片,找到後把圖片名存入字典中,圖片在源字串中的位置也要存入到字典中,最後把字典存入可變陣列中。程式碼如下:

 

7.轉換完成,我們需要對attributeString進行替換,替換的時候要從後往前替換,弱從前往後替換,會造成range和圖片要放的位置不匹配的問題。替換程式碼如下:

 

8.把替換好的可變屬性字串賦給TextView

 

9.替換前後效果如下:

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

iOS開發之顯示微博表情

相關文章