覆盖表情符号图形

时间:2011-11-25 22:25:16

标签: iphone ios core-text emoji

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

从我到目前为止所读到的,一种可能的解决方案是创建一个自定义字体扩展,它会覆盖所需的unicode字符。我希望保持与CATextLayer的互操作性。

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

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

3 个答案:

答案 0 :(得分:2)

我花了很多时间尝试做同样的事情。最好的办法是替换NSString中表情符号的unicode值,例如。 \ uE100等带占位符字符串。您可以使用HTML标记替换表情符号编码,并使用UIWenViews或DTCoreText内嵌绘制图像。 我做了这个,它也有效,但它会有点慢(特别是如果你想在表视图中显示这个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实例来显示temp。

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

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

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

答案 1 :(得分:0)

一种解决方案是使用UITextFieldTextView委托并听取用户的输入。当他们键入表情符号字符时,弹出UIImageView与文本内联,并删除带输入的表情符号图标。

答案 2 :(得分:0)

Apple的私人存档(如果您是iOS开发者计划的注册会员,您可以访问),可以提及此问题。

听起来,潜在的解决方案是明确设置您尝试显示的字体的字体。