1>監聽表情按鈕點擊
2>同一時間只能顯示一個放大鏡,創建一個即可,不用重復創建
3>放大鏡應該作為一個整體HWEmotionPopView,而且比較簡單,用XIB來實現即可,提供類方法
4>在HWEmotionPageView中懶加載HWEmotionPopView
注1:HWEmotionPopView添加位置問題,若添加在HWEmotionPageView上面,則會被上面工具台擋住,因此,應該添加到最上面的窗口UIWindow,而且不是keyWindow,因為彈出的鍵盤也是一個UIWindow,覆蓋在keyWindow之上,keyWindow是後面的主控制器!!!
注2:由於添加到UIWindow上,坐標系發生變化,要注意坐標系轉換
5>設置HWEmotionPopView裡面的按鈕表情,需要在點擊按鈕的時候,拿出按鈕對應的Emotion模型,設置給HWEmotionPopView
方法一:給每一個表情按鈕綁定tag,根據tag取出self.emotions數組中的Emotion模型;
方法二:
1. 一個按鈕對應一個表情模型,應該自定義按鈕,給每個按鈕一個表情模型,以後可以直接根據按鈕取出表情模型,且重寫按鈕中表情模型的setter方法,將png還是code設置按鈕顯示封裝到裡面
2. 設置HWEmotionPopView裡面的按鈕表情也只需要傳給其一個表情模型即可,XIB裡面的按鈕對應自定義表情按鈕
HWEmotionPageView表情按鈕點擊
1>點擊表情取消高亮
方法一:重寫按鈕的setHighlighted:方法
方法二:self.adjustsImageWhenHighlighted= NO;按鈕高亮的時候,不要去調整圖片(不要調整圖片會灰色)
2>popView消失
GCD延時後移除
實現:點擊表情按鈕往控制器中的textView插入表情
方法一:使用代理,但是層級結構太深,要拿到textView只能通過控制器,需要不斷使用代理傳遞出去:
HWEmotionPageView——HWEmotionListView——HWEmotionKeyboard——HWComposeViewController——HWEmotionTextView
方法二:使用通知,由系統管理,表情按鈕點擊發送通知即可,控制器接收通知
關鍵:使用NSAttributedString進行圖文混排!!!
注1:圖文混排最好放在textView中處理,不要直接在控制器中處理
注2:不應該直接將處理表情文字的操作放到WBTextView中,否則直接會和HWEmotion關聯,導致WBTextView只能用在當前項目中,應該再自定義一個textView,繼承自WBTextView,專門用來處理表情文字
1>寫一個UITextView的分類,封裝insertAttributeText:方法,可以插入帶屬性文字
注:但是關於字體的設置不應該封裝到裡面
2>重寫setAttributeText方法,保證輸入表情,刪除占位符
3>添加刪除按鈕
注意:在initWithFrame:方法中添加按鈕,布局時第一個按鈕是刪除按鈕,不是表情按鈕,注意subViews
問題:當使用中文鍵盤後,鍵盤高度會變高(提示中文),再次點擊表情鍵盤時,工具條位置不會改變
原因:設置了switchingKeybaord
解決辦法:讓工具條對新彈出的鍵盤做出反應!!!
即:在舊鍵盤退出的時候,不要改變frame,再新鍵盤彈出的時候再根據新鍵盤做出反應
在插入表情圖片的時候,表情圖片會變小,文字也會變小
原因:在插入表情的時候,設置字體,在插入表情之後操作
若放在插入屬性文字裡面操作就不會出現變小的情況,即先設置好字體,再給self.attributedText賦值就行
即:一旦self.attributedText= attributedText;後再取出來在外面設置字體就不好使!
關鍵原因:self.attributedText的屬性為copy屬性,為拷貝屬性,外面文本改了不會影響到裡面的文本
但是將設置字體的方法放到裡面又不太合適,因為該方法只是用來插入屬性文字,不需要管字體
解決辦法:使用block,將設置字體的代碼放到block裡面!!!
方法:將所有圖片表情轉為文字描述,發給新浪
1>HWEmotionTextView中提供一個方法,將textView中所有圖片文字,轉為NSString
關鍵:遍歷attributedText,找出所有的圖片表情,將其轉化為文字描述!!!
注:現在的attch只能拿到設置的UIImage,為了從attch中拿到當初設置emotion中的表情文字描述,即要實現拿到attach就能拿到對應的emotion,可以自定義HWEmotionAttachment,增加一個emotion屬性!!!
2>自定義HWEmotionAttachment
實現:長按表情會彈出對應的表情popView,再拖動時候顯示相應表情popView
方法:給pageView增加長按手勢
注1:將顯示PopView的代碼封裝到WBEmotionPopView中,傳給一個表情按鈕
注2:原先WBEmotionPopView中設置表情模型的方法就可以去掉,直接設置表情按鈕即可
1>HWEmotionPopView
2>HWEmotionPageView
注1:要將最近使用的表情存放進沙盒
注2:在表情按鈕點擊或者長按松開的時候存入沙盒
注3:提供一個WBEmotionTool管理表情存儲,取出
注:MJCodingImplementation宏可以替代下面兩個方法
HWEmotionPageView中存儲
HWEmotionKeyboard中讀取