bry*_*ark 26 iphone uilabel core-text ios ctlineref
我正试图用UILabel来解决一个毛茸茸的问题,除了一件事之外,我已经弄清楚了它的大部分内容:我正在挑战了解对于CTLine"字符串访问" 意味着什么.
我想用的方法是CTLineGetOffsetForStringIndex.这是该方法文档的链接.
这是我不理解的文档部分(重点是我的):
charIndex沿基线的主偏移量,如果该行不支持字符串访问,则为0.0.
当我运行这个方法时,我0.0回来了,所以我猜这意味着该行不支持字符串访问 - 但这究竟是什么意思呢?
语句“该行不支持字符串访问”可以被推断为意味着该文本行不能被视为可以通过每个字符的索引来访问的字符序列。
\n\n这可能会引发关于视觉字符与非视觉字符以及字形与字符的大量讨论。但为了简化讨论,假设一行文本可能具有以下状态之一:
\n\n现在为这个推论提供一些理由。
\n\nApple 的文档提供了 Text Kit 的描述,UILabel 是在此基础上构建的:
\n\n\n\n\nUIKit 框架包含几个类,其目的是在 app\xe2\x80\x99s 用户界面中显示文本:UITextView、UITextField 和 UILabel,如在 iOS 中显示文本内容中所述。从 UITextView 类创建的文本视图旨在显示大量文本。UITextView 的底层是一个强大的布局引擎,称为 Text Kit。如果您需要自定义布局过程或需要干预该行为,则可以使用 Text Kit。对于少量文本和需要自定义解决方案的特殊需求,您可以使用替代的较低级别技术,如较低级别文本处理技术中所述。
\n\nText Kit 是 UIKit 框架中的一组类和协议,提供高质量的排版服务,使应用程序能够存储、布局和显示文本,并具有精细排版的所有特征,例如字距调整、连字、换行和对齐方式。Text Kit 构建在 Core Text 之上,因此它提供相同的速度和功能。UITextView与Text Kit完全集成;它提供编辑和显示功能,使用户能够输入文本、指定格式属性并查看结果。其他文本工具包类提供文本存储和布局功能。图 8-1 显示了 Text Kit 在其他 iOS 文本和图形框架中的位置。
\n\n \n\n文本工具包使您可以完全控制用户界面元素中的文本呈现。除了 UITextView 之外,UITextField 和 UILabel 也构建在 Text Kit 之上,并且与动画、UICollectionView 和 UITableView 无缝集成。Text Kit 采用完全可扩展的面向对象架构设计,支持子类化、委托和一套完整的通知,可实现深度定制。
\n
相关问题的答案提到了几个类,例如NSTextStorage、NSLayoutManager和NSTextContainer。
考虑使用UILabel上述所有类来提供在父级中显示文本的最终结果UIView,最终用户在屏幕上看到该结果。布局管理器( 的实例NSLayoutManager)协调文本视图、文本容器和文本存储之间的数据流,从而在视图中显示字符。布局管理器将字符映射到字形,并确定使用哪些行来布局字形。布局管理器还弄清楚如何显示下划线和删除线等不属于字形的部分。
对于本次讨论来说,重要的是布局管理器对文本行进行布局。如果该行文本是可选择的,则用户可以选择该行中的可见字符。在这种特殊情况下,该行存在“字符串访问”。
\n\n类似的概念是相关问题的解决方案中发布的方法:
\n\nfunc boundingRect(forGlyphRange glyphRange: NSRange, in container: NSTextContainer) -> CGRect\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n返回单个边界矩形(在容器坐标中),包围在给定文本容器中为给定字形范围绘制的所有字形和其他标记,包括在其行片段矩形和文本属性(例如下划线)之外绘制的字形。
\n
最后,该函数的参考讨论CTLineGetOffsetForStringIndex谈到了适合绘制自定义插入符的图形偏移。插入符号可用于显示插入点或文本选择。主要和次要偏移量可以被认为是字符串(字符序列)的开始和结束索引。如果给定行没有字符序列,则不能有选定的字符、脱字符号、字形范围。因此没有“字符串访问”。
| 归档时间: |
|
| 查看次数: |
571 次 |
| 最近记录: |