使用 Core Text 为给定的字符串范围设置背景颜色/突出显示颜色
Posted
技术标签:
【中文标题】使用 Core Text 为给定的字符串范围设置背景颜色/突出显示颜色【英文标题】:Setting the background colour/highlight colour for a given string range using Core Text 【发布时间】:2011-05-28 18:54:50 【问题描述】:我在我的 iPhone 应用程序中使用 Core Text 布局了一些文本。我正在使用 NSAttributedString
在给定范围的文本中设置某些样式。
我似乎找不到用于设置背景/突出显示颜色的属性,尽管它似乎是可能的。我找不到听起来相关的属性名称常量,文档仅列出:
kCTCharacterShapeAttributeName
kCTFontAttributeName
kCTKernAttributeName
kCTLigatureAttributeName
kCTForegroundColorAttributeName
kCTForegroundColorFromContextAttributeName
kCTParagraphStyleAttributeName
kCTStrokeWidthAttributeName
kCTStrokeColorAttributeName
kCTSuperscriptAttributeName
kCTUnderlineColorAttributeName
kCTUnderlineStyleAttributeName
kCTVerticalFormsAttributeName
kCTGlyphInfoAttributeName
kCTRunDelegateAttributeName
Twitterrific 的开发者 Craig Hockenberry 在 Twitter 上公开表示,他使用 Core Text 来呈现推文,而 Twitterrific 有这个背景/突出显示,当你触摸一个链接时。
任何正确方向的帮助或指示都会很棒,谢谢。
编辑:这是link to the tweet Craig 发布的提到“核心文本、属性字符串和大量艰苦的工作”,以及提到使用 CTFrameSetter 指标来计算触摸是否相交的follow up带有链接。
【问题讨论】:
这不是一个答案,但您可以使用 XCode 的 Organizer 窗口中的屏幕截图选项还是取消触摸? 【参考方案1】:最后,我不得不使用核心文本度量方法(获取范围、边界、线的起点等)来计算链接的边界矩形。一旦我为链接跨越的每一行设置了一个矩形,我就将背景绘制到上下文中,然后再重新绘制其上方的文本。
看起来工作量很大,但确实有效。
【讨论】:
嗨 Jasarien,你能展示如何使用这些指标吗?我对核心文本非常陌生。这将非常有帮助。我自己也在尝试。 试试这个快速演示,它非常有用。 slideshare.net/DJune/text-layout-with-core-text 我认为如果您提供您找到的解决方案会更好。 我最终得到的解决方案在这里github.com/jasarien/CoreTextHyperlinkView【参考方案2】:使用 ios 6,我认为您可以通过 NSBackgroundColorAttributeName 获得您想要的效果。如:
[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:selectedRange];
【讨论】:
这在使用 CTFrameDraw 和 CTFramesetterCreateFrame 时不会绘制任何 BackgroundColor 我不认为该属性与 CTAttributedString 具有相等属性以上是关于使用 Core Text 为给定的字符串范围设置背景颜色/突出显示颜色的主要内容,如果未能解决你的问题,请参考以下文章