iphone - 覆盖表情符号图形

标签 iphone ios core-text emoji

我想用我自己的自定义图形覆盖表情符号图标(仅在我的应用程序中)。

根据我目前所读的内容,一种可能的解决方案是创建一个自定义字体扩展名来覆盖所需的 unicode 字符。最好我想保持与 CATextLayer 的互操作性。

编辑:看起来自定义字体不是我的解决方案;字体必须以灰度定义。下一种可能性:创建自定义 CALayer,根据表情符号代码将字符串分 block ,然后手动进行类型设置 + 图形渲染(即使用核心图形和核心文本)

编辑:还希望在表格 View 中保持平滑的滚动性能。

最佳答案

我花了很多时间尝试做同样的事情。最好的办法是替换 NSString 中表情符号的 unicode 值,例如。\uE100 等带有占位符字符串。您可以将表情符号编码替换为 HTML 标签并使用 UIWenViews 或 DTCoreText内联绘制图像。 我已经这样做了,它也有效,但是它会有点慢(特别是如果你想在表格 View 中显示这个标签。)

这是一个小开场白:

创建一个以 UIImages 作为对象和占位符字符串作为键的字典:

        self.emoticonDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"happyEmoticon.png",    @":)",
                         @"sadEmoticon.png",      @":(",
                         @"testImg.png",          @"\uE100",
                         nil];


__block NSString *text1 = [NSString stringWithFormat:@"<html><p>%@</p></html>",text];
    [self.emoticonDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
        text1 = [text1 stringByReplacingOccurrencesOfString:key withString:[NSString stringWithFormat:@"<img height= 15 width= 15 src=\"%@\">",obj]];
    }];

此时您可以将此 HTML 加载到 UIWebView 中,您将获得所需的内容。

[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8"  baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first

如果 UIWebView 的速度慢是一个问题,您可以提前阅读。无论哪种情况,请务必查看此答案末尾的注释。

要创建 DTAtributedLabel,我们执行以下操作: 首先,我们使用 DHTMLAttributedStringBuilder 构建一个 NSattributedString:

NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1
                                                    options:@{
                                     DTDefaultFontFamily: @"Helvetica",
                                     DTDefaultFontSize:@15,};
                                     documentAttributes:nil]
                                     generatedAttributedString];

然后您可以使用 DTAttributedLabel 实例来显示温度。

 self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property

我的目标是在支持自定义表情符号的同时快速生成文本标签(表格 View )。 DTAtributedLabels 很快(比 UIWebView 快得多) 笔记: 我还制作了一个自定义字体,我将表情符号的 unicode 值映射到自定义字形。令我惊讶的是,仍然显示默认的表情符号。我想在这里声明,每当 iOS (CoreText) 遇到一个值位于 Emoji 部分的字符时,它默认使用 AppleColorEmoji 字体绘制它。缺乏关于 Apple Color Emoji 字体实际上是如何在 iOS 上绘制的文档实际上让我很难证明这一点,但这似乎是一个似是而非的解释。 如果您将表情符号从字符调色板应用程序拖放到 textEdit 中的文件中,然后选择它并尝试更改字体,您会发现它不会发生。 同样,如果您键入一些文本,然后选择它并尝试将其字体更改为 Apple Color Emoji,您会发现它不会发生。当我反编译 Apple Color Emoji 字体时,我没有找到文本字符(0-9 除外)的字符映射或字形。不知何故,即使您将标签的字体设置为 Apple Color Emoji,标签文本的文本(非表情符号)部分的字体也会设置为其他字体。

请随时发表评论并分享您的知识,因为 Apple Color Emoji 字体周围的这个区域仍然非常不清楚。

关于iphone - 覆盖表情符号图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274769/

相关文章:

iphone - 检测模拟器的类型

iphone - 如何重置核心数据中的主键计数/最大值?

iphone - 检查 iPhone App 进入前台时在后台停留了多长时间

ios - 核心文本性能问题

ios - Core Text - 字形高度

iphone - 编写通用 XML 解析器

ios - 平滑滚动 500 多张图片

ios - 如何导航 tabbarviewcontroller

ios - 如何反转 CGPath 的点顺序

iphone - 通过像 iOS 5 中的短信应用程序一样拖动手指来隐藏键盘