zoukankan      html  css  js  c++  java
  • iOS 自定义emoji表情键盘

    之前走了很多弯路,包括自己定以emoji表情,自己创建view类去处理图文混排 ,当把这些焦头烂额的东西处理完了才发现 ,其实系统自带键盘是如此的方便,iOS 系统自带的表情在view,textfield,UIimageView展示时已经将uicode做过处理,直接展示成图片的形式,其实质依然是UTF8的 符号,如果你要自己定义图片,然后添加进textField 或者Label里,那你就中大奖了,图文混排 需要费很大的功夫处理。

    首先 ,想要获取系统的表情,要首先知道表情对应的UTF8 的编码方式,我将其中一部分的图片展示出来 ,然后用UIButton 排列,iOS 7后又增加了300多个表情符号,这些都可以百度查到,现在上代码:

    //将数字转为

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

    定义的宏将转成UTF8,取出对应的表情符号:

    //获取默认表情数组

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

    }

    在将对应数组里的表情依次存放到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
    未完 ,待续  后续贴出做出类似 自定义表情的展示方式 。
  • 相关阅读:
    0903编写ssh实现远程执行命令 并解决粘包问题
    学习日记0829 IP协议 子网掩码 端口TCP协议的三次握手 四次挥手 套接字socket
    学习日记0828单例 OSI七层协议
    学习日记0827异常处理 元类 自定义元类 自定义元类来实例化类 属性查找顺序
    函数装饰器
    函数对象
    参数
    函数
    文件操作
    字符编码
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/4920228.html
Copyright © 2011-2022 走看看