iOS仿QQ聊天輸入框封裝

iOS仿QQ聊天框XMChatBar系列之一 -- 封裝XMChatFaceView

效果圖

具體demo,示例:XMChatBar

一:封裝的思路

1.實現(xiàn)目標

目標 解決方法
可以左右翻頁 使用UIScrollView 解決
每頁可以根據(jù)屏幕自適應(yīng)表情大小 根據(jù)屏幕尺寸,定義好每一行顯示幾個(demo中5S=7個 6plus=8個)根據(jù)屏幕寬度計算
每頁最后個是一個刪除按鈕 計算出每頁顯示多少個,在每一頁最后增加個刪除按鈕
帶有pageControl指示當(dāng)前是第幾頁 使用UIPageControl
有經(jīng)典,最近兩種選擇,底部帶有一個發(fā)送按鈕 使用UIView作為bottomView
點擊每個表情,可以直接將對應(yīng)中文名顯示在輸入框,點擊刪除表情,可以刪除上一個選擇的表情 每個顯示表情的UIImageView添加UITapGestureRecognizer手勢,增加XMChatFaceViewDelegate,重寫個發(fā)送表情的代理事件
長按每個表情,可以顯示一個放大預(yù)覽 自定義XMFacePreviewView,給UIScrollView添加UILongPressGestureRecognizer手勢,根據(jù)點擊的點來確定點擊的是那個表情

2. 前期準備

前期準備 解決方案
所有的表情圖片 可以從QQ,WeChat里面獲取,或者網(wǎng)上搜索
表情圖片對應(yīng)的中文名字,對應(yīng)的表情id,表情圖片名稱 自己做個,或者網(wǎng)上也可以找到,推薦自己做個,比較繁瑣(但是功能可以做的比較強大),保存成一個plist

3. 實現(xiàn)步驟

1.主要類
類名 主要功能
XMFaceManager 獲取所有的emoji的Dict,最近使用的表情dict數(shù)組,保存最近使用的表情
XMChatFaceView 具體的faceView
XMFacePreviewView 私有類,寫在XMChatFaceView中,表情預(yù)覽view
2.具體思路
XMFaceManager -- 表情管理manager
  1. 可以獲取所有表情的NSArray - 里面包含多個NSDictionary(包括face_id,face_name兩個key-value鍵值對,其中face_id名就是圖片名稱,face_name就是圖片的中文名稱,命名有點問題,請大家自動忽略)
  2. 可以通過face_id獲取face_name
  3. 可以通過face_name 獲取 face_id
  4. 可以將含有face_name的字符串轉(zhuǎn)化成一個包含表情圖片的NSMutableAttributedString的字符串
  5. 可以獲取最近使用過的表情NSArray
  6. 保存一個最近使用的表情
XMFacePreviewView -- 表情預(yù)覽View
私有屬性
屬性名 作用
faceImageView 顯示表情圖片
backgroundImageView 表情圖片的背景
私有方法

- (void)setFaceImage:(UIImage *)image -- 設(shè)置表情圖片,如果圖片變化了 添加一個放大縮小的動畫

XMChatFaceView
私有屬性
屬性名 作用
scrollView 放置所有表情imageVIew的
pageControl 指示當(dāng)前頁面的
facePreviewView 預(yù)覽view
bottomView 底部view(上面有sendButton,recentButton,emojiButton)
sendButton 發(fā)送按鈕,點擊后調(diào)用XMChatBar 發(fā)送消息
recentButton 顯示最近使用的表情
emojiButton 顯示所有emoji表情
maxPerLine(readOnly) 設(shè)置默認每一行最多顯示幾個表情,因為從0開始 應(yīng)該是 返回n-1個
maxLine 顯示多少行表情,demo中,最近表情為兩行,emoji表情為3行
facePage emoji表情顯示當(dāng)前頁,用于最近表情切換回emoji表情,自動返回到上次emoji表情瀏覽頁
私有方法
方法名 作用
- (void)setup 僅初始化的時候調(diào)用,完成添加bottomView,scrollView,pageControl,給scrollView添加長按手勢
- (void)resetScrollView 切換顯示不同表情頁面時候調(diào)用,更改按鈕狀態(tài),刪除scrollView的subViews,修改scrollView的contentSize,contentOffset
- (void)changeFaceType:(UIButton *)button emojiButton,recentButton對應(yīng)的點擊事件
- (void)sendAction:(UIButton *)button 發(fā)送按鈕對應(yīng)點擊事件
- (UIImageView *)faceViewWitnInPoint:(CGPoint)point 通過點擊的點,獲取對應(yīng)點擊的具體UIImageView
- (void)handleLongPress:(UILongPressGestureRecognizer *)longPress 處理scrollView的長按手勢
- (void)handleTap:(UITapGestureRecognizer *)tap 處理所有UIImageView的點擊手勢
- (void)setupEmojiFaces 初始化所有的emoji表情
- (void)setupRecentFaces 初始化最近使用的emoji表情
設(shè)計思路
  1. 整個XMChatFaceView分成兩塊 UIScrollView(用來放所有的表情UIImageVIew),UIView(bottomView,用戶放一些功能按鈕)
  2. 切換顯示不同類型FaceView的時候,直接移除掉scrollView上所有子視圖,重新添加即可

二: 總結(jié)

1.這篇blog也是我剛開始寫blog,文字不順,請大家原諒
2.整篇文章沒有太多代碼,我這里只寫了當(dāng)時寫這個的時候的一些思考方法,思路,具體代碼的話,大家下載demo實例,注釋我已經(jīng)添加了,應(yīng)該算比較完整.
3.如果demo使用過程中有什么問題,歡迎大家指出,修改,也歡迎大家一起討論iOS開發(fā)過程中遇到的問題,QQ:3057600441
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幽钢,隨后出現(xiàn)的幾起案子歉备,更是在濱河造成了極大的恐慌,老刑警劉巖匪燕,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕾羊,死亡現(xiàn)場離奇詭異,居然都是意外死亡帽驯,警方通過查閱死者的電腦和手機龟再,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尼变,“玉大人利凑,你說我怎么就攤上這事。” “怎么了截碴?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵梳侨,是天一觀的道長。 經(jīng)常有香客問我日丹,道長走哺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任哲虾,我火速辦了婚禮丙躏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘束凑。我一直安慰自己晒旅,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布汪诉。 她就那樣靜靜地躺著废恋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扒寄。 梳的紋絲不亂的頭發(fā)上鱼鼓,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音该编,去河邊找鬼迄本。 笑死,一個胖子當(dāng)著我的面吹牛课竣,可吹牛的內(nèi)容都是我干的嘉赎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼于樟,長吁一口氣:“原來是場噩夢啊……” “哼公条!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起隔披,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赃份,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奢米,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡纠永,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年鬓长,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尝江。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡涉波,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情啤覆,我是刑警寧澤苍日,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站窗声,受9級特大地震影響相恃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜笨觅,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一拦耐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧见剩,春花似錦杀糯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至羹呵,卻和暖如春骂际,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背担巩。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工方援, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涛癌。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓犯戏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拳话。 傳聞我的和親對象是個殘疾皇子先匪,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評論 25 707
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,160評論 30 470
  • 講臺前,老師振振有詞弃衍、情緒很是激動呀非。他或許覺得提高音量可以使我們提神醒腦,但事實卻恰恰相反镜盯。悶熱的夏日最是疲憊岸裙,許...
    良肉包包閱讀 79評論 0 0
  • 菲兒老師降允,昨天聽了您的點評,我又重新畫了一幅艺糜,畫了一天才畫完剧董,錯過了中午的點評幢尚,您有空的時候幫我看一下吧~
    naic閱讀 197評論 7 1