核心文本 - 在iPhone中选择文字?

Luk*_*asz 3 iphone core-text

我需要在视图中使用Core Text渲染富文本(简单格式化,一行文本中的多种字体等).我想知道用户使用(标准复制/粘贴功能)是否可以选择以这种方式呈现的文本?

jav*_*smo 24

我在CoreText中实现了一个文本选择.这真的是一项艰苦的工作......但这是可行的.

基本上你必须CTLine使用CTFrameGetLineOrigins(1),CTLineGetTypographicBounds(2),CTLineGetStringRange(3)CTLineGetOffsetForStringIndex(4)保存所有的rects和origin .

可以使用原点(1),上升(2),下降(2)和偏移(3)(4)来计算线矩形,如下所示.

lineRect = CGRectMake(origin.x + offset, 
                      origin.y - descent, 
                      offset, 
                      ascent + descent);
Run Code Online (Sandbox Code Playgroud)

在这样做之后,您可以测试哪条线具有循环线的触摸点(始终记住CoreText使用反Y坐标).

知道具有触摸点的线,您可以知道位于该点(或最近的字母)的字母CTLineGetStringIndexForPosition.

这是一个截图.

选择使用CoreText绘制的文本

对于那个放大镜,我使用了这篇文章中显示的代码.

编辑: 要绘制蓝色背景选择,您必须使用绘制矩形CGContextFillRect.不幸的是,没有背景颜色NSAttributedString.

  • 谢谢,@ TomTom.我绘制文本和使用CoreText进行选择的代码有近500行.发布它没有任何解释是很复杂的.选择哪一部分你遇到麻烦? (2认同)