【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效果:

原文地址:https://www.cnblogs.com/zhanqin/p/9204529.html

时间: 2024-10-17 00:36:38

【iOS】自定义表情的实现的相关文章

iOS开发之自定义表情键盘(组件封装与自动布局)

下面的东西是编写自定义的表情键盘,话不多说,开门见山吧!下面主要用到的知识有MVC, iOS开发中的自动布局,自定义组件的封装与使用,Block回调,CoreData的使用.有的小伙伴可能会问写一个自定义表情键盘肿么这么麻烦?下面将会介绍我们如何用上面提到的东西来定义我们的表情键盘的.下面的内容会比较多,这篇博文还是比较有料的. 还是那句话写技术博客是少不了代码的,下面会结合代码来回顾一下iOS的知识,本篇博文中用到的知识点在前面的博客中都能找到相应的内容,本篇算是一个小小的功能整合.先来张图看

IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果

拖个button继承一下  几行代码 就搞定 自用效果还行 IOS 自定义UIBUTTON 直接拖个xib 就能在button上显示多行文本 并且添加了点击的效果,布布扣,bubuko.com

iOS 自定义页面的切换动画与交互动画

在iOS7之前,开发者为了寻求自定义Navigation Controller的Push/Pop动画,只能受限于子类化一个UINavigationController,或是用自定义的动画去覆盖它.但是随着iOS7的到来,Apple针对开发者推出了新的工具,以更灵活地方式管理UIViewController切换. 自定义导航栏的Push/Pop动画 为了在基于UINavigationController下做自定义的动画切换,先建立一个简单的工程,这个工程的rootViewController是一个

iOS自定义转场动画实战讲解

iOS自定义转场动画实战讲解 转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerAnimated:completion:这一组函数以模态视图的方式展现.隐藏视图.如果用到了navigationController,还可以调用pushViewController:animated:和popViewController这一组函数将新的视图控制器压栈.弹栈. 下图中所有转场动画都是自定义的

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 的解决办法

iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar  的解决办法 问题:iOS自定义tabbar后popToRootViewContriller和poptoviewcontroller时出现两个tabbar 1.自定义代码: - (void)viewWillAppear:(BOOL)animated { [super  viewWillAppear:animated]; // 删除系统自动生成的UITabBarB

IOS 自定义 滑动返回 手势

/** 只需要在你自定义的导航控制器中,改成如下代码即可,自定义手势返回 */ #define KEY_WINDOW [[UIApplication sharedApplication] keyWindow] #define kScreenW KEY_WINDOW.bounds.size.width #define kAnimateDuration 0.3 #define kDefaultAlapa 0.5 #define kDefaultScale 0.95 #define iOS7 ([UI

IOS开发—IOS自定义任意位置右滑POP视图控制器

IOS自定义任意位置右滑POP视图控制器 IOS7.0之后系统提供了原生的从左边缘滑动pop出栈的方法,也可以自定义左边缘pop出栈,将在下一篇介绍,本篇介绍通过添加手势的方法实现IOS当前屏幕任意位置(非指定左边缘)右滑pop视图控制器出栈.代码如下: // // LXXPopViewController.m // 任意点右滑Pop // // Created by Lotheve on 15/6/12. // Copyright (c) 2015年Lotheve. All rights re

iOS自定义的UISwitch按钮

UISwitch开关控件 开关代替了点选框.开关是到目前为止用起来最简单的控件,不过仍然可以作一定程度的定制化. 一.创建 UISwitch* mySwitch = [[ UISwitchalloc]initWithFrame:CGRectMake(200.0,10.0,0.0,0.0)]; 是不是很奇怪,大小竟然是0.0×0.0,没错,系统会自动帮你决定最佳的尺寸,你自己写的尺寸会被忽略掉,你只要定义好相对父视图的位置就好了.默认尺寸为79 * 27. 二.显示控件 [ parrentView

IOS Emoji表情

IOS Emoji 前言:我比较喜欢有趣的东西,有一些有趣的小东西,可能不是多么多么牛逼,也可能不需要多高深的技巧,也不会为其他什么强大的功能而服务,但是有时候将很多有趣的小东西组合起来运用,比如在你的app某个功能上适当添加这个有趣的小东西的时候,说不定就能起到锦上添花的作用,更能吸引用户.下面就粗略介绍IOS Emoji表情字符. 关于IOS Emoji我才刚刚了解,还有很多东西不是特别清楚,等待以后有时间深入探索更多的应用知识. 然后展示我之前运用到按钮上的一个案例,是不是有点意思: 这个