Iphone 对于CTLine来说,有“CTLine”意味着什么;字符串访问“;?
我试图解决一个问题,我已经解决了大部分问题,除了一件事:我很难理解Iphone 对于CTLine来说,有“CTLine”意味着什么;字符串访问“;?,iphone,ios,uilabel,core-text,ctlineref,Iphone,Ios,Uilabel,Core Text,Ctlineref,我试图解决一个问题,我已经解决了大部分问题,除了一件事:我很难理解CTLine拥有“字符串访问”意味着什么 我想使用的方法是CTLineGetOffsetForStringIndex 以下是我不理解的文档部分(重点是我的): charIndex沿基线的主偏移,或0.0(如果 行不支持字符串访问。 当我运行这个方法时,我得到了0.0,所以我猜这意味着该行不支持字符串访问-但这到底是什么意思?语句“该行不支持字符串访问”可以推断为意味着文本行可以而不是被视为可以通过每个字符的索引访问的字符序列 这可
CTLine
拥有“字符串访问”意味着什么
我想使用的方法是CTLineGetOffsetForStringIndex
以下是我不理解的文档部分(重点是我的):
charIndex沿基线的主偏移,或0.0(如果
行不支持字符串访问。
当我运行这个方法时,我得到了0.0
,所以我猜这意味着该行不支持字符串访问-但这到底是什么意思?语句“该行不支持字符串访问”可以推断为意味着文本行可以而不是被视为可以通过每个字符的索引访问的字符序列
这可能会引发一场关于视觉字符与非视觉字符、字形与字符的大型讨论。但为了简化讨论,假设一行文本可能具有以下状态之一:
NSTextStorage
,NSLayoutManager
,以及NSTextContainer
考虑到UILabel
使用上述所有类来提供最终结果,即最终用户在屏幕上看到的在父UIView
中显示文本。布局管理器(NSLayoutManager的实例)协调文本视图、文本容器和文本存储之间的数据流,从而在视图中显示字符。布局管理器将字符映射到图示符,并计算出用于布局图示符的线条。布局管理器还可以确定如何显示下划线和删除线等不属于图示符的内容
布局管理器布局文本的行,这一点对于本次讨论非常重要。如果该行文本是可选的,则用户可以选择该行中的可见字符。在这种特殊情况下,该行有“字符串访问”
类似的概念是相关问题解决方案中公布的方法:
func boundingRect(forGlyphRange glyphRange: NSRange, in container: NSTextContainer) -> CGRect
返回单个边界矩形(在容器坐标中),该矩形包含在给定文本容器中为给定glyph范围绘制的所有glyph和其他标记,包括在其线段矩形外绘制的glyph和下划线等文本属性
最后,函数
CTLineGetOffsetForStringIndex
的参考讨论谈到了适用于绘制自定义插入符号的图形偏移。插入符号可用于显示插入点或文本选择。主偏移量和次偏移量可以被认为是字符串(一个字符序列)的开始和结束索引。如果给定行没有字符序列,则不能有选定的字符、插入符号和符号范围。因此,无需“字符串访问”。无需代码-我正在尝试理解苹果的文档所说的内容,而不是在这里寻求关于我自己代码的帮助。谢谢@布莱恩克拉克:这方面有什么进展吗?@BarrettJ没有,什么都没有:(我刚刚就这件事开了一个悬赏,因为我也碰到了一堵墙。在我的例子中,这是我100%的错误,我迭代了几行,然后遍历了每行的范围。在最内部的循环中,我做了一些事情,效果是CTLineGetOffsetForStringIndex(line,lineIndex,NULL)
。我使用的是行的索引(在我的例子中总是0-因为我的测试文本没有换行),我应该使用lin