我想用我自己的自定义图形覆盖表情符号图标(仅在我的应用程序中)。
根据我目前所读的内容,一种可能的解决方案是创建一个自定义字体扩展名来覆盖所需的 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/
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)
在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
我正在尝试在Rails上安装ruby,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf
这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac
假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案
啊,正则表达式有点困惑。我正在尝试删除字符串末尾所有可能的标点符号:ifstr[str.length-1]=='?'||str[str.length-1]=='.'||str[str.length-1]=='!'orstr[str.length-1]==','||str[str.length-1]==';'str.chomp!end我相信有更好的方法来做到这一点。有什么指点吗? 最佳答案 str.sub!(/[?.!,;]?$/,'')[?.!,;]-字符类。匹配这5个字符中的任何一个(注意,。在字符类中并不特殊)?-前一个字符或组
我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195