濰坊網(wǎng)站建設工作室推廣平臺有哪些
步驟:發(fā)微博12-表情鍵盤06-點擊表情 -> 發(fā)微博13-表情鍵盤07-插入表情和封裝textView -> 發(fā)微博14-表情鍵盤08-長按表情 -> 發(fā)微博15-表情鍵盤09-最近表情 -> 發(fā)微博16-表情鍵盤10-最近表情完善
發(fā)微博12-表情鍵盤06-點擊表情
APP的演示動畫:
分析:當觸發(fā)表情按鈕的點擊事件時,會出現(xiàn)相應表情的放大鏡。
在HMPageEmotionView(scrollView上每一頁上的表情內容)類的setEmotion:方法中,監(jiān)聽表情按鈕點擊,如下:
其中,btnClick:方法如下:
?
說明:
- HMEmotionButton封裝了表情按鈕的細節(jié),一個HMEmotionButton對應一個HMEmotion。如下:
?2.HMEmotionPopView封裝了表情按鈕的放大鏡的細節(jié),并且懶加載。如下:
3.由于放大鏡界面固定,所以采用xib加載。如下:?
補充:instancetype表明返回類型與調用該類方法的對象類型相同。
發(fā)微博13-表情鍵盤07-插入表情和封裝textView
APP的演示動畫:
?
分析:當點擊表情按鈕時,會發(fā)出通知,將表情數(shù)據(jù)傳遞給composeViewController的textView上,點擊右下角的刪除按鈕可以刪除已經插入的表情或文字。
在HMPageEmotionView中,完善btnClick:方法,延遲0.2s讓popView自動消失,并且發(fā)出通知給composeViewController的textView是哪個按鈕響應了點擊事件。如下:
說明:由composeViewController的textView監(jiān)聽該通知,如下:
?
其中,emotionDidSelect:方法,具體代碼如下:
?
在emotionDidSelect:方法中調用的insertEmotion:方法是HMEmotionTextView(繼承自HMTextView)對插入表情細節(jié)的封裝,如下:
?
其中insertAttributedText:方法是基于UITextView的category(擴展),如下:
?
在HMPageEmotionView中的initWithFrame:方法初始化刪除按鈕,如果沒有設置刪除按鈕的frame,刪除按鈕會在pageView的subviews的第一個,截圖如下:
為了解決這種情況,需要完善layoutSubviews:方法,讓遍歷subviews從1開始,如下:?
參照表情選中的通知,要實現(xiàn)刪除按鈕的功能,也要發(fā)出通知,如下:?
?
UITextView遵守的UIKeyInput協(xié)議上有一個很實用的方法,用于刪除文字,如下:?
發(fā)微博14-表情鍵盤08-長按表情
APP的演示動畫:
分析:在整個pageView上添加長按手勢監(jiān)聽功能,只要手指長按表情按鈕,表情按鈕就會顯示相應的放大鏡。
在HMPageViewController的initWithFrame:方法中,添加長按手勢,如下:
其中,longPressPageView:方法,具體代碼如下:?
說明:
1.通過手指位置找對應的表情按鈕的emotionButtonWith:方法如下:
?
2.showFrom:方法是HMEmotionPopView類中對顯示popView詳細代碼的封裝,同時改進了之前HMEmotionPopView類中的代碼,刪除了之前的emotion屬性,如下:
3.完善btnClick:方法,如下:
?
發(fā)微博15-表情鍵盤09-最近表情
APP的演示動畫:
分析:點擊表情按鈕,除了會發(fā)出通知,還會存儲表情數(shù)據(jù)到沙盒中(歸檔),然后在”最近“上加載沙盒中的表情數(shù)據(jù)(ps:懶加載和”最近“按鈕的點擊事件都要加載沙盒中的表情數(shù)據(jù),保證每次到”最近“界面能及時更新表情數(shù)據(jù))。
參照賬號登陸工具類,表情數(shù)據(jù)也要新建一個工具類,如下:
在HMPageEmotionView的selectEmotion:方法中,將表情數(shù)據(jù)存儲到沙盒里,如下:
?
在HMEmotionKeyboard類的recentEmotionView懶加載和HMEmotionTabBarDeleage代理方法中的”最近“都要加載沙盒里的表情數(shù)據(jù),如下:?
?
注意:
為了保證切換到”最近“時,表情數(shù)據(jù)能及時并且以正確的位置顯示出來,需要對HMEmotionListView的setEmotion:方法進行完善,如下:?
發(fā)微博16-表情鍵盤10-最近表情完善
仔細觀察之前的”最近“,相同的表情會重復出現(xiàn),明顯不符合常理。所有對其進行改進。
APP的演示動畫:
?
分析:”最近“上相同的表情不會重復出現(xiàn),并且被點擊的表情會自動排在最前面。
在前文中,有兩處地方加載了沙盒子的表情數(shù)據(jù),意味著有兩個表情數(shù)組,實際上只需要一個表情數(shù)組即可,所以對表情工具類進行改進,如下:
說明:
1.刪除重復的表情,系統(tǒng)方法removeObject只能刪除同一個內存地址的模型,不能滿足要求。我們要刪除的是內存地址不同的表情模型但是模型里的數(shù)據(jù)卻相同。為此,可以在HMEmotion類重寫isEqual方法,如下:
2.歸檔解檔需要HMEmotion表情模型遵守NSCoding協(xié)議,并實現(xiàn)initWithCoder:
和encodeWithCoder:方法,如下:?
更輕松的解決方法是導入MJExtension框架,實現(xiàn)MJCodingImplementation即可,如下:?
3.加載沙盒中的表情數(shù)據(jù),返回一個表情數(shù)組的方法現(xiàn)在只需要在懶加載中即可,如下:?
4.在”最近“中,點擊表情,會即時更新”最近“上的表情數(shù)據(jù),這是因為選中表情發(fā)出了通知,觸發(fā)了加載表情數(shù)組的方法。如下:?