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

从到目前为止的内容来看,一种可能的解决方案是创建一个自定义字体扩展名,该扩展名将覆盖所需的unicode字符。优选地,我想保持与CATextLayer的互操作性。

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

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

最佳答案

我花了很多时间尝试做同样的事情。最好的选择是替换NSString中表情符号的unicode值,例如。\uE100等,并带有占位符字符串。您可以用HTML标记替换表情符号编码,并使用UIWenViews或DTCoreText内嵌绘制图像。
我已经做到了,它也可以工作,但是会有点慢(特别是如果您想在表 View 中显示此Label。)

这是一个小开始:

使用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的速度较慢,则可以提前阅读。无论哪种情况,请务必在答案末尾看到注释。

要创建DTAttributedLabel,请执行以下操作:
首先,我们使用DTHTMLAttributedStringBuilder构建一个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 )。 DTAttributedLabels速度快(比UIWebView快得多)
笔记:
我还制作了一种自定义字体,在该字体中,我已将表情符号的unicode值映射到了一个自定义字形。令我惊讶的是,仍然显示了默认表情符号。我想在此声明,每当iOS(CoreText)遇到一个值位于表情符号部分的字符时,默认情况下它将使用AppleColorEmoji字体绘制该字符。缺少有关如何在iOS上实际绘制Apple Color Emoji字体的文档,这实际上使我难以证明这一点,但这似乎是一个合理的解释。
如果将表情符号从字符调色板应用程序拖放到textEdit中的文件上,然后选择它并尝试更改字体,您会发现它没有发生。
同样,如果您键入一些文本,然后选择它并尝试将其字体更改为Apple Color Emoji,您会发现它没有发生。当我反编译Apple Color Emoji字体时,没有找到文本字符的字符映射或字形(0-9除外)。以某种方式,即使将标签的字体设置为Apple Color Emoji,标签文本的文本(非emoji)部分的字体也设置为其他字体。

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

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

10-13 02:32