iOS 自定義emoji表情鍵盤

以前走了不少彎路,包括本身定以emoji表情,本身建立view類去處理圖文混排 ,當把這些焦頭爛額的東西處理完了才發現 ,其實系統自帶鍵盤是如此的方便,iOS 系統自帶的表情在view,textfield,UIimageView展現時已經將uicode作過處理,直接展現成圖片的形式,其實質依然是UTF8的 符號,若是你要本身定義圖片,而後添加進textField 或者Label裏,那你就中大獎了,圖文混排 須要費很大的功夫處理。mysql

首先 ,想要獲取系統的表情,要首先知道表情對應的UTF8 的編碼方式,我將其中一部分的圖片展現出來 ,而後用UIButton 排列,iOS 7後又增長了300多個表情符號,這些均可以百度查到,如今上代碼:

//將數字轉爲sql

#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);segmentfault

定義的宏將轉成UTF8,取出對應的表情符號:

//獲取默認表情數組數組

- (NSArray *)defaultEmoticons {服務器

    NSMutableArray *array = [NSMutableArray new];ide

    for (int i=0x1F600; i<=0x1F64F; i++) {ui

        if (i < 0x1F641 || i > 0x1F644) {編碼

            int sym = EMOJI_CODE_TO_SYMBOL(i);code

            NSString *emoT = [[NSString alloc] initWithBytes:&sym length:sizeof(sym)encoding:NSUTF8StringEncoding];orm

            [array addObject:emoT];

        }

    }

    return array;

}

在將對應數組裏的表情依次存放到UIButton裏,貼出部分代碼:

 

    //獲取數組

    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];

    }

 

這樣就完成了 在你自定義鍵盤裏的表情添加 ,同時設置該點擊事件將表情符號添加進textField或者Label裏:

- (void) biaoqingClick:(UIButton *)biaoqing{

    NSArray *emoji = [self defaultEmoticons];

    NSString *str = emoji[biaoqing.tag];

    self.textField.text = str;

}

基本功能完成 ,效果圖展現:
 
iOS <wbr>自定義emoji表情鍵盤總結
在後臺服務器處理表情方面 ,mysql 5.4以後 就能夠自動識別 uicode 的表情編碼,而且經驗證iOS端的表情符號在安卓上也能夠識別,若是mysql的版本太低,報錯沒法識別uicode編碼 ,能夠參見服務端對emoji支持的博客:http://segmentfault.com/a/1190000000616820
未完 ,待續  後續貼出作出相似 自定義表情的展現方式 。
相關文章
相關標籤/搜索