【iOS】自定义表情的实现
现在很多App都有自己的自定义的表情,客户端可能要实现自己定表情的选择、发送和显示,这里我介绍一种简单的自定义表情的实现思路和代码。
以下介绍基本可以实现聊天中对自定义表情的需求,可结合下图来理解:
资源准备:
- 自定义表情图片的命名。
- 每个自定义表情的意思。
- emtionMeans.plist:key--表情选择器每个表情对应的tag值,value--每个表情的意思。
- emtions.plist:key--每个表情的意思,value--每个表情对应的图片。
实现逻辑:
- 初始化表情选择器,主要根据以上两个plist表格相互转换来获取需要的东西。
创建一个EmojiView继承自UIVIew,主要代码如下:
实例化一个EmojView对象即可得到一个自定义表器的选择器。
接下来我们需要一个辅助器,用来判断某个字符串是不是表情字符串以及某一串字符串中是否包含表情。因为现实表情需要用到富文本,一般对内存和性能的消耗比较大,对于不含表情的字符串我们还是直接UILabel来显示更好些,特别是像聊天这样的布局。显示某条聊天消息之前,我们先判断该消息中是否包含表情字符串,在这里我用的是[]来识别的,如果包含[],我们再进一步通过emtionMeans.plist中表情的含义来对比,看这个[]中的内容是否属于表情,如果这两者都满足,则表示该消息中含有自定义表情。
辅助器主要代码:
最后我们需要一个可以显示我们的表情的Label,iOS自带的UILabel显然不能直接用,这里我用到了一个第三方MLEmojiLabel,用它来做自定义表情的展示。直接用也会有问题,因为自定义表情的资源不同,要显示自己的话需要做修改,另外也做了一些优化(直接从网上下载的第三方在返回经过表情识别处理的Attributed字符串的方法中对表情字符串的识别度不是很精准)。
不过调用很方便,实例化MLEmojiLabel直接调用下面的方法即可显示自己的自定义表情:
[self.emojiLabel setEmojiText:self.emojiString];
做聊天的话可能需要动态改变Label的高度,需要调用上面的方法之后调用一下下面的方法即可:
CGSize textSize = [self.emojiLabel sizeThatFits:CGSizeMake(SCREEN_WIDTH - 160, size.height)];
以上的代码可根据固定的宽度来获取当前的高度。
完整代码点击这里获取。
demo效果:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
移动弹窗基础知识浅析——IOS弹窗体系
云小妹导读:作为设计童鞋的经常打交道的移动组件,反而是最捉摸不定的东西,各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景 今天的Work Like Alibaba实践分享,我们邀请阿里巴巴TXD体验中心的交互设计师夏天为我们带来IOS弹窗体系分享。 1 前言 前段时间整理移动组件,发现最为常见的【弹窗】反而是最“捉摸不定”的东西。各种类型的弹窗傻傻分不清楚,不知道在什么场景下应该用哪种弹窗。尤其是遇到“二次确认”等场景…… 因此,打算从头整理移动弹窗的基础知识,从定义出发,对移动弹窗进行分类,然后分别分析每一类弹窗的应用场景,以及在使用过程中需要注意的点。 本想一次性全部整理完,但是发现iOS和Material Design两大体系下的弹窗类目繁多,相互之间又有千丝万缕的关联,因此决定拆分成四篇
- 下一篇
监听WebView页面上所有的图片
有两周没写简书了,有一丢丢懒惰了,还是要坚持下来啊 废话不多说,进入主题 需求 现在有一个类似聚合阅读的APP里面的文章都是以WebView来显示内容 用户点击文章中的图片会进入到查看图片的页面 问题 根据Android Hybrid的想法,需要在HTML页面中提供让Android调用的js方法,但是在的HTML中并没有提供让Android调用的方法的时候该怎么实现功能。 思路 使用WebView的js注入,为HTML加入js函数监听 在Android中添加当触发HTMl中js方法的接口 实现 布局就一个webview,这里就不贴出了 MainActivity.java public class MainActivity extends AppCompatActivity{ private static final String URL = "http://www.jianshu.com/p/c51174efd824"; private WebView webView; @Override protected void onCreate(Bundle savedInstance...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19