日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

自定制emoji替换系统的emoji键盘

發(fā)布時(shí)間:2023/12/20 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定制emoji替换系统的emoji键盘 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、關(guān)于emoji表情

隨著iOS系統(tǒng)版本的升級,對原生emoji表情的支持也越來越豐富。emoji表情是unicode碼中為表情符號設(shè)計(jì)的一組編碼,當(dāng)然,還有獨(dú)立于unicode的另一套編碼SBUnicode,在OS系統(tǒng)中,這兩種編碼都有很好的支持。UI系統(tǒng)會自動幫我們將編碼轉(zhuǎn)義成表情符號,例如用SBUnicode如下代碼:

? UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
? ? label.font = [UIFont systemFontOfSize:25];
? ? label.text = @"\uE056";
? ? [self.view addSubview:label];

就會在屏幕上出現(xiàn)一個(gè)笑臉:

?
二、開發(fā)表情鍵盤的思路

首先為了實(shí)現(xiàn)跨平臺,無論iOS端,andorid端還是web端,都要有一個(gè)相同的標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)就可以是國際Unicode編碼,我們的思路是將表情文字進(jìn)行unicode編碼后再進(jìn)行傳輸,因此,有兩中方式,一種是通過自定義一套表情切圖,將其與unicode碼一一對應(yīng),在轉(zhuǎn)碼的時(shí)候,我們一一遍歷,轉(zhuǎn)換成unicode后進(jìn)行傳輸,這樣的好處是我們可以保證所有平臺所能使用的表情統(tǒng)一。在iOS端,可以有另一種方式,通過上面我們知道,通過SBUnicode碼我們可以在客戶端顯示表情符號,并且這個(gè)碼的排列是十分有規(guī)律的,通過這個(gè)特點(diǎn),我們可以通過遍歷SBUnicode碼的范圍進(jìn)行表情的創(chuàng)建,省去的圖片素材的麻煩。

iOS中可用的表情unicode范圍是:0xE001~0xE05A,0xE101~0xE15A,

0xE201~0xE253,0xE401~0xE44C,0xE501~0xE537。

我們可以通過遍歷的方法,將其都加入數(shù)據(jù)源數(shù)組中:

int emojiRangeArray[10] = {0xE001,0xE05A,0xE101,0xE15A,0xE201,0xE253,0xE401,0xE44C,0xE501,0xE537};
? ? for (int j = 0 ; j<10 ; j+=2 ) {
? ? ? ???
? ? ? ? int startIndex = emojiRangeArray[j];
? ? ? ? int endIndex = emojiRangeArray[j+1];
? ? ? ???
? ? ? ? for (int i = startIndex ; i<= endIndex ; i++ ) {
? ? ? ? //添加到數(shù)據(jù)源數(shù)組
? ? ? ? ? ? [dataArray addObject:[NSString stringWithFormat:@"%C", (unichar)i]];
? ? ? ? }
? ? }

鍵盤的擺放,可以通過collectionView來做,十分方便:

? ? //為了擺放分頁控制器,創(chuàng)建一個(gè)背景view
? ? bgView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 200)];
? ? //分頁控制器
? ? pageControlBottom = [[UIPageControl alloc]initWithFrame:CGRectMake(0, 170, [UIScreen mainScreen].bounds.size.width, 20)];
? ? [bgView addSubview:pageControlBottom];
? ? //collectionView布局
? ? UICollectionViewFlowLayout * layout = [[UICollectionViewFlowLayout alloc]init];
? ? //水平布局
? ? layout.scrollDirection=UICollectionViewScrollDirectionHorizontal;
? ? //設(shè)置每個(gè)表情按鈕的大小為30*30
? ? layout.itemSize=CGSizeMake(30, 30);
? ? //計(jì)算每個(gè)分區(qū)的左右邊距
? ? float xOffset = (kscreenWidth-7*30-10*6)/2;
? ? //設(shè)置分區(qū)的內(nèi)容偏移
? ? layout.sectionInset=UIEdgeInsetsMake(10, xOffset, 10, xOffset);
? ? scrollView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 160) collectionViewLayout:layout];
? ? //打開分頁效果
? ? scrollView.pagingEnabled = YES;
? ? //設(shè)置行列間距
? ? layout.minimumLineSpacing=10;
? ? layout.minimumInteritemSpacing=5;
? ???
? ? scrollView.delegate=self;
? ? scrollView.dataSource=self;
? ? scrollView.backgroundColor = bgView.backgroundColor;
? ? [bgView addSubview:scrollView];
?

在collectionView的回調(diào)方法中,處理如下:

//每頁28個(gè)表情
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
? ? if (((dataArray.count/28)+(dataArray.count%28==0?0:1))!=section+1) {
? ? ? ? return 28;
? ? }else{
? ? ? ? return dataArray.count-28*((dataArray.count/28)+(dataArray.count%28==0?0:1)-1);
? ? }
? ??
}
//返回頁數(shù)
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
? ? return (dataArray.count/28)+(dataArray.count%28==0?0:1);
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
? ? UICollectionViewCell * cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"biaoqing" forIndexPath:indexPath];
? ? for (int i=cell.contentView.subviews.count; i>0; i--) {
? ? ? ? [cell.contentView.subviews[i-1] removeFromSuperview];
? ? }
? ? UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
? ? label.font = [UIFont systemFontOfSize:25];
? ? label.text =dataArray[indexPath.row+indexPath.section*28] ;
? ??
? ???
? ? [cell.contentView addSubview:label];
? ? return cell;
}
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
? ? NSString * str = dataArray[indexPath.section*28+indexPath.row];
? ? //這里手動將表情符號添加到textField上
? ???
}
//翻頁后對分頁控制器進(jìn)行更新
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
? ? CGFloat contenOffset = scrollView.contentOffset.x;
? ? int page = contenOffset/scrollView.frame.size.width+((int)contenOffset%(int)scrollView.frame.size.width==0?0:1);
? ? pageControlBottom.currentPage = page;
?
}
?
三、切換系統(tǒng)鍵盤和自定義的表情鍵盤

UITextField和UITextView都會有下面這個(gè)屬性和方法:

@property (nullable, readwrite, strong) UIView *inputView;???
- (void)reloadInputViews;
?

inputView我們可以設(shè)置textView和textField成為第一響應(yīng)時(shí)的彈出附件,如果我們不設(shè)置或者設(shè)置為nil,則會彈出系統(tǒng)鍵盤,reloadInputView方法可以使我們刷新這個(gè)附件視圖,通過這兩個(gè),我們可以非常輕松的實(shí)現(xiàn)鍵盤的切換,比如我們在一個(gè)出發(fā)方法中如下處理:

-(void)imageViewTap{
? ? if (![_publishContent isFirstResponder]) {
? ? ? ? return;
? ? }
? ? if (isEmoji==NO) {
? ? ? ? isEmoji=YES;
? ? ? ? //呼出表情
? ? ? ? _textView.inputView=bgView;
? ? ? ? [_textView reloadInputViews];
? ? }else{
? ? ? ? isEmoji=NO;
? ? ? ? _textView.inputView=nil;
? ? ? ? [_textView reloadInputViews];
? ? }
?
? ???
}

效果如下:

追注:測試上面的SBUnicode碼在模擬器上可以正常顯示,真機(jī)并不能識別,可以通過將表情符全部添加到一個(gè)plist文件中,通過文件讀取來創(chuàng)建鍵盤的方式進(jìn)行真機(jī)上的開發(fā)。plist文件地址如下

------------------------------------------分割線------------------------------------------

免費(fèi)下載地址在?http://linux.linuxidc.com/

用戶名與密碼都是www.linuxidc.com

具體下載目錄在?/2015年資料/12月/12日/iOS自定義的emoji表情鍵盤/

下載方法見?http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2015-12/126157.htm

轉(zhuǎn)載于:https://www.cnblogs.com/Hakim/p/5634023.html

總結(jié)

以上是生活随笔為你收集整理的自定制emoji替换系统的emoji键盘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。