使用 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 为给定的字符串范围设置背景颜色/突出显示颜色的主要内容,如果未能解决你的问题,请参考以下文章

必背函数——python学习第四次总结

Core Text 中的规范字体粗细是啥?

Couchbase 使用键获取给定日期范围的文档

Mysql 中的Text字段的范围?与使用方法!

将 UITapGestureRecognizer 添加到具有范围的 NSAttributed Text

范围有问题? “对象引用未设置为对象的实例” [重复]