標籤:lis alt info set 動態 修改 img 直接 動態改變
現在很多App都有自己的自訂的表情,用戶端可能要實現自己定表情的選擇、發送和顯示,這裡我介紹一種簡單的自訂表格情的實現思路和代碼。
以下介紹基本可以實現聊天中對自訂表格情的需求,可結合來理解:
資源準備:
- 自訂表格情圖片的命名。
- 每個自訂表格情的意思。
- emtionMeans.plist:key--表情選取器每個表情對應的tag值,value--每個表情的意思。
- emtions.plist:key--每個表情的意思,value--每個表情對應的圖片。
實現邏輯:
- 初始化表情選取器,主要根據以上兩個plist表格相互轉換來擷取需要的東西。
建立一個EmojiView繼承自UIVIew,主要代碼如下:
執行個體化一個EmojView對象即可得到一個自訂表格器的選取器。
接下來我們需要一個輔助器,用來判斷某個字串是不是表情字串以及某一串字串中是否包含表情。因為現實表情需要用到富文本,一般對記憶體和效能的消耗比較大,對於不含表情的字串我們還是直接UILabel來顯示更好些,特別是像聊天這樣的布局。顯示某條聊天訊息之前,我們先判斷該訊息中是否包含表情字串,在這裡我用的是[]來識別的,如果包含[],我們再進一步通過emtionMeans.plist中表情的含義來對比,看這個[]中的內容是否屬於表情,如果這兩者都滿足,則表示該訊息中含有自訂表格情。
輔助器主要代碼:
最後我們需要一個可以顯示我們的表情的Label,iOS內建的UILabel顯然不能直接用,這裡我用到了一個第三方MLEmojiLabel,用它來做自訂表格情的展示。直接用也會有問題,因為自訂表格情的資源不同,要顯示自己的話需要做修改,另外也做了一些最佳化(直接從網上下載的第三方在返回經過表情識別處理的Attributed字串的方法中對錶情字串的識別度不是很精準)。
不過調用很方便,執行個體化MLEmojiLabel直接調用下面的方法即可顯示自己的自訂表格情:
[self.emojiLabel setEmojiText:self.emojiString];
做聊天的話可能需要動態改變Label的高度,需要調用上面的方法之後調用一下下面的方法即可:
CGSize textSize = [self.emojiLabel sizeThatFits:CGSizeMake(SCREEN_WIDTH - 160, size.height)];
以上的代碼可根據固定的寬度來擷取當前的高度。
完整代碼點擊這裡擷取。
demo效果:
【iOS】自訂表格情的實現