我想用我自己的自定义图形覆盖表情图标(只在我的应用程序中)。
根据我到目前为止所读到的内容,一种可能的解决方案是创建一个自定义字体扩展,它覆盖所需的unicode字符。最好是我想保持与CATextLayer的互操作性。
编辑:看起来自定义字体不是我的解决方案;字体必须以灰度定义。下一个可能性:创建一个自定义的CALayer,基于表情符号代码将字符串分块成段,并手动进行字体设置+图形渲染(即使用核心图形和核心文本)
编辑:也希望在表视图中保持平滑的滚动性能。
发布于 2013-06-18 21:37:44
我花了很多时间来尝试做同样的事情。你最好的办法是在你的NSString中替换表情符号的Unicode值。\uE100等,并使用占位符字符串。您可以使用HTML替换表情符号编码,并使用UIWenViews或DTCoreText以内联方式绘制图像。我已经这样做了,它也可以工作,但它会有点慢(特别是如果你想在表视图中显示这个标签。)
下面是一个小入门:
以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]];
}];此时,您可以将此超文本标记语言加载到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快得多)注意:我还做了一个自定义字体,将表情符号的Unicode值映射到自定义字形。令我惊讶的是,仍然显示了默认的表情符号。我想在这里声明,每当iOS (CoreText)遇到值位于Emoji部分的字符时,它默认使用AppleColorEmoji字体绘制该字符。缺乏关于Apple Color Emoji字体是如何在iOS上绘制的文档,这让我很难证明这一点,但这似乎是一个合理的解释。如果你将一个表情符号从字符调色板应用程序拖放到textEdit中的一个文件中,然后选择它并尝试更改字体,你会发现这是不会发生的。同样,如果你输入一些文本,然后选择它,并试图将它的字体更改为Apple Color Emoji,您将看到它不会发生。当我反编译Apple Color Emoji字体时,我没有找到文本字符的字符映射或字形(0-9除外)。不知何故,即使你将标签的字体设置为Apple Color Emoji,标签文本的文本(非表情)部分的字体也被设置为其他字体。
请随时评论和分享您的知识,因为围绕Apple Color Emoji字体的这个区域仍然非常不清楚。
发布于 2011-11-26 07:59:15
一种解决方案是使用UITextField或TextView委托并监听用户的输入。当他们输入一个表情字符时,在文本中插入一个内联的UIImageView,然后删除输入的表情图标。
发布于 2011-11-26 14:15:41
在苹果的私人开发者论坛(如果你是iOS开发者计划的注册会员,你就可以访问这个论坛)上有一些关于这个问题的提及。
听起来可能的解决方案是显式地设置您想要显示的任何内容的字体。
https://stackoverflow.com/questions/8274769
复制相似问题