使用Core Text设置给定字符串范围的背景颜色/高亮颜色

8
我在我的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会出现我所说的背景/高亮显示。

alt text

任何帮助或指引方向都将是极好的,谢谢。 编辑:这里有一个由Craig发布的推文链接 ,提到了“核心文本,属性字符串以及大量的辛勤工作”,以及后续提到使用CTFrameSetter指标来计算触摸是否与链接相交。

1
这不是一个答案,但你能在XCode的Organiser窗口中使用截图选项吗?或者那也会取消触摸功能吗? - deanWombourne
2个回答

3
最终,我不得不使用Core Text度量方法(获取范围、线条边界和原点等)来计算链接的边界矩形。一旦每行跨越的链接都有了一个矩形,我就在上面重新绘制文本之前将背景绘制到上下文中。看起来这是很多工作,但它确实有效。

嗨,Jasarien,您能展示一下如何使用那些指标吗?我对核心文本非常陌生。这将非常有帮助。我也在尝试自己做。 - Vignesh
试试这个快速演示,非常有用。 http://www.slideshare.net/DJune/text-layout-with-core-text - Jasarien
我认为如果您提供您找到的解决方案会更好。 - aryaxt
1
我最终采用的解决方案在这里 https://github.com/jasarien/CoreTextHyperlinkView - Jasarien

1

在iOS 6中,我认为您可以使用NSBackgroundColorAttributeName来获得您想要的效果。例如:

[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:selectedRange];

当使用CTFrameDraw和CTFramesetterCreateFrame时,这不会绘制任何BackgroundColor。 - Phil
我认为这个属性在CTAttributedString中没有相等的属性。 - CarmeloS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接