使用Lable展示emoji表情
来源:互联网 发布:来自故宫的礼物 淘宝 编辑:程序博客网 时间:2024/06/14 09:15
1.在UIKit中的UILabel默认是可以展示emoji表情的,只是对于表情的编码方式有要求,微信中的表情信息的样式是这样的
<span class="emoji emoji1f380"></span>这里是信息的文字内容<span class="emoji emoji3120e3"></span>
其中的 1f380 3120e3 就是两个表情,但这是16进制的编码方式,在label中是不会显示表情的,我们就需要转换编码方式其实就是unicode编码。
2.转换编码的之前需要把要转换的文本拿出来,下面的代码就是把上面的字符串传入。
- (NSString *)filterHTML:(NSString *)html{ NSScanner * scanner = [NSScanner scannerWithString:html]; NSString * text = nil; while([scanner isAtEnd] == NO) { [scanner scanUpToString:@"<" intoString:nil]; [scanner scanUpToString:@">" intoString:&text]; if ([html rangeOfString:@"<span"].location != NSNotFound) { //将文本中的表示emoji表情的字符拿出来 NSString * str = [html subStringFrom:@"emoji emoji" to:@"\">"]; //转换编码方式为emoji的编码 NSString * str1 = [NSString emojiWithStringCode:str]; //将带有标签的文本替换成emoji的编码 html = [html stringByReplacingOccurrencesOfString:[NSString stringWithFormat:@"<span class=\"emoji emoji%@\"></span>",str] withString:str1]; } } return html;}
h文件
#import <Foundation/Foundation.h>@interface NSString (Emoji)/** * 将十六进制的编码转为emoji字符 */+ (NSString *)emojiWithIntCode:(long)intCode;/** * 将十六进制的编码转为emoji字符 */+ (NSString *)emojiWithStringCode:(NSString *)stringCode;- (NSString *)emoji;/** * 是否为emoji字符 */- (BOOL)isEmoji;@end
#import "NSString+Emoji.h"#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)@implementation NSString (Emoji)+ (NSString *)emojiWithIntCode:(long)intCode { NSString * s = [NSString stringWithFormat:@"%ld",intCode]; int symbol = EmojiCodeToSymbol([s intValue]); NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding]; if (string == nil) { // 新版Emoji string = [NSString stringWithFormat:@"%C", (unichar)intCode]; } return string;}- (NSString *)emoji{ return [NSString emojiWithStringCode:self];}+ (NSString *)emojiWithStringCode:(NSString *)stringCode{ char *charCode = (char *)stringCode.UTF8String; long intCode = strtol(charCode, NULL, 16); return [self emojiWithIntCode:intCode];}// 判断是否是 emoji表情- (BOOL)isEmoji{ BOOL returnValue = NO; const unichar hs = [self characterAtIndex:0]; // surrogate pair if (0xd800 <= hs && hs <= 0xdbff) { if (self.length > 1) { const unichar ls = [self characterAtIndex:1]; const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; if (0x1d000 <= uc && uc <= 0x1f77f) { returnValue = YES; } } } else if (self.length > 1) { const unichar ls = [self characterAtIndex:1]; if (ls == 0x20e3) { returnValue = YES; } } else { // non surrogate if (0x2100 <= hs && hs <= 0x27ff) { returnValue = YES; } else if (0x2B05 <= hs && hs <= 0x2b07) { returnValue = YES; } else if (0x2934 <= hs && hs <= 0x2935) { returnValue = YES; } else if (0x3297 <= hs && hs <= 0x3299) { returnValue = YES; } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) { returnValue = YES; } } return returnValue;}@end
阅读全文
0 0
- 使用Lable展示emoji表情
- Lable和TextView使用iPhone表情(unicode emoji字符集)
- 使用EMOJI表情
- 使用EMOJI表情
- 使用EMOJI表情
- 使用EMOJI表情
- 使用EMOJI表情
- Lable加载 类似QQ表情 (unicode emoji字符集)
- Lable加载 类似QQ表情 (unicode emoji字符集)
- Lable加载 类似QQ表情 (unicode emoji字符集)
- ios中使用emoji表情
- 安卓使用emoji表情
- emoji表情在web的展示与mysql存储方式
- emoji表情在web的展示与mysql存储方式
- Android 利用正则+反射+SpannableString展示Emoji表情
- emoji表情在web的展示与mysql存储方式
- Emoji表情在web端的展示步骤详解!!!
- Emoji表情在web端的展示步骤详解
- iOS 【你的项目内存溢出了吗?】
- 使用Gecco写Java简单爬虫
- 使用SVN
- ARP协议
- Listener监听器总结
- 使用Lable展示emoji表情
- 2017.06.23 python套接字第1次笔记
- 8.4.2 ResultTask执行结果与Driver的交互原理及源码详解
- C++多态的实现原理
- 有关Material Design Library 的使用
- angular2项目部署到weblogic
- git的使用
- Python---字符串
- CentOS系统rsync文件同步安装配置