iOS開發(fā)之自定義表情鍵盤(組件封裝與自動布局)
創(chuàng)新互聯(lián)專注于臺安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供臺安營銷型網(wǎng)站建設(shè),臺安網(wǎng)站制作、臺安網(wǎng)頁設(shè)計、臺安網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務(wù),打造臺安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供臺安網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
iOS開發(fā)之自定義表情鍵盤(組件封裝與自動布局)
之前走了很多彎路,包括自己定以emoji表情,自己創(chuàng)建view類去處理圖文混排 ,當把這些焦頭爛額的東西處理完了才發(fā)現(xiàn) ,其實系統(tǒng)自帶鍵盤是如此的方便,iOS 系統(tǒng)自帶的表情在view,textfield,UIimageView展示時已經(jīng)將uicode做過處理,直接展示成圖片的形式,其實質(zhì)依然是UTF8的 符號,如果你要自己定義圖片,然后添加進textField 或者Label里,那你就中大獎了,圖文混排 需要費很大的功夫處理。
首先 ,想要獲取系統(tǒng)的表情,要首先知道表情對應(yīng)的UTF8 的編碼方式,我將其中一部分的圖片展示出來 ,然后用UIButton 排列,iOS 7后又增加了300多個表情符號,這些都可以百度查到,現(xiàn)在上代碼:
//將數(shù)字轉(zhuǎn)為
#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x 0x3F000) 4) | (x 0xFC0) 10) | (x 0x1C0000) 18) | (x 0x3F) 24);
定義的宏將轉(zhuǎn)成UTF8,取出對應(yīng)的表情符號:
//獲取默認表情數(shù)組
- (NSArray *)defaultEmoticons {
NSMutableArray *array = [NSMutableArray new];
for (int i=0x1F600; i=0x1F64F; i++) {
if (i 0x1F641 || i 0x1F644) {
int sym = EMOJI_CODE_TO_SYMBOL(i);
NSString *emoT = [[NSString alloc] initWithBytes:sym length:sizeof(sym)encoding:NSUTF8StringEncoding];
[array addObject:emoT];
}
}
return array;
}
在將對應(yīng)數(shù)組里的表情依次存放到UIButton里,貼出部分代碼:
//獲取數(shù)組
NSArray *arrEmotion = [self defaultEmoticons];
//將表情放到UIButton里
CGFloat W = 30;
CGFloat H = 30;
CGFloat X;
CGFloat Y;
for (int i = 0; i count; i ++) {
X = 10 +(W+5) * (i%10);
Y = 260 + (i/10)* (H +5);
UIButton *biaoqing =[[UIButton alloc] init];
biaoqing.backgroundColor = [UIColor redColor];
biaoqing.frame = CGRectMake(X, Y, W, H);
[self.view addSubview:biaoqing];
NSString *Str = arrEmotion[i];
[biaoqing setTitle:Str forState:UIControlStateNormal];
biaoqing.tag = i;
[biaoqing addTarget:self action:@selector(biaoqingClick:) forControlEvents:UIControlEventTouchUpInside];
}
這樣就完成了 在你自定義鍵盤里的表情添加 ,同時設(shè)置該點擊事件將表情符號添加進textField或者Label里:
- (void) biaoqingClick:(UIButton *)biaoqing{
NSArray *emoji = [self defaultEmoticons];
NSString *str = emoji[biaoqing.tag];
self.textField.text = str;
}
基本功能完成 ,效果圖展示:
在后臺服務(wù)器處理表情方面 ,mysql 5.4之后 就可以自動識別 uicode 的表情編碼,并且經(jīng)驗證iOS端的表情符號在安卓上也可以識別,如果mysql的版本過低,報錯無法識別uicode編碼
之前做過 【OC版本】 和 【swift版本】 圖文混排和表情鍵盤,說實在的很low,特別是鍵盤,整體只是實現(xiàn)了效果并沒有封裝,很難集成使用!而且之前是使用的附件做的并不支持gif表情,我嘗試各種方法,想實現(xiàn)類似qq的絲滑gif表情體驗,真的不容易;經(jīng)過各種嘗試和努力最終基于 【YYText】 實現(xiàn)了類似qq的gif表情聊天方案,大量的表情也不會卡頓!而且這次的鍵盤做了比較全面的封裝集成起來很方便!
單行輸入:
多行輸入:
鍵盤的集成方法:
項目github地址: LiuqsEmoticonkeyboard
2. LiuqsEmotionPageView 鍵盤的分頁類用來放表情按鈕,內(nèi)部主要處理按所在行列位置的計算,需要給出當前是第幾頁,用來加載表情:
3. LiuqsKeyBoardHeader 全局宏定義的類。
4. LiuqsTopBarView 鍵盤上輸入框和一些切換按鈕的實體類,這個可以根據(jù)需求自定義:
5. LiuqsButton 鍵盤上的表情按鈕,自定義是為了更好的和圖片一一對應(yīng),更容易處理。
6. NSAttributedString+LiuqsExtension 富文本的分類:
getPlainString 方法主要是通過遍歷富文本中的附件(在這里是指表情圖片)并使用普通的字符串(比如:[大笑])替換,得到普通的字符串編碼,拿字符串編碼去通訊,比如調(diào)用接口發(fā)消息;
舉個栗子:
轉(zhuǎn)換過的字符串是這樣滴: 好害羞[害羞]!
用來展示的效果是這樣滴:
7. LiuqsTextAttachment 自定義附件類,繼承于NSTextAttachment。
8. LiuqsDecoder 轉(zhuǎn)碼的核心類:
主要方法:
詳細說一下內(nèi)部的實現(xiàn):
首先是靜態(tài)屬性:
到此基本就說完了!YYText有很多強大的功能,大家自己可以隨意擴展,在這里只用到了imageView附件。
可能講不夠全面,具體細節(jié)可以看 項目demo !
寫的比較辛苦,如果對你有用希望可以支持一下,記得給個star哦!
有任何意見和建議都可以提出來,我的郵箱: liuquanshui@100tal.com
1、ios系統(tǒng)添加表情符號鍵盤,再輸入一些表情式的字符時就會自動的顯示出相關(guān)的表情出來,可以添加到文字說說等等里面。
2、表情鍵盤也是內(nèi)置的一種鍵盤,只需要找到設(shè)置的方法就可以把表情鍵盤添加到鍵盤上面去。打開設(shè)備上面設(shè)置——通用——鍵盤——添加鍵盤——表情符號。
3、設(shè)置完畢之后,就可以在短信或者是發(fā)表說說、聊天的地方插入表情符號。
設(shè)置方法,以搜狗輸入法操作為例:
1、首先打開一個聊天窗口;如圖所示。
2、接著點擊輸入框,在彈出的頁面點擊表情按鈕;如圖所示。
3、然后在出來的頁面點擊斗圖選項;如圖所示。
4、進入斗圖頁面,點擊下面的開關(guān)按鈕,打開;如圖所示。
5、打開后,在輸入框輸入文字就有表情出來了;如圖所示。