博客> 关于iOS文本布局编程的认识
关于iOS文本布局编程的认识
2019-03-22 15:36 评论:0 阅读:369 Wensidun
ios TextLayout
文本布局编程描述Cocoa文本系统如何布局文本。文本布局是将一串文本字符、字体信息和页面规范转换为位于页面上特定位置的、适合显示和打印的符号行。

在Cocoa文本系统中文本展示方面,The Layout Manager Class 提供了核心控制对象NSLayoutManager。主要作用表现在以下方面: 1.文本存储(NSTextStorage)和文本容器对象(NSTextContainer). 2.对字符生成象形符号(glyph) 3.计算象形符号的定位和信息存储。 4.管理象形符号和字符的范围。 5.在指定视图中绘制象形符号。 6.管理段落风格控制的规则。 7.计算行文本的矩形边框。 8.连字符的管理。 9.字符和象形符号的操作。 在类MVC模式中,NSLayoutManager扮演着控制器的角色(Controller)。NSTextStorage是NSMutableAttributeString的子类,作为model的一部分,持有带属性的文本字符串,例如:字体(typeface)、风格(style)、颜色(color)和大小(font)。NSTextContainer也被视为model的一部分,它展示了文本在页面的几何布局。NSTextView作为View的部分,用于文本展示。NSLayoutManager在textSystem中扮演controller的角色是因为它指导文本符号转化为象形符号,指示typesetter(排字机)把象形符号排列到一行或者多行的textContainer对象中,协同文本展示在一个或多个textView对象中。 图示1: 文本展示的组成(composition)  text_display_composition.gif

线程安全
总的来说,给定layoutManager不应被同时放在多个线程使用。大部分layoutManager放在主线程。如果你一定要在多线程使用,请确保对象不要再多个线程之间同时被访问。

文本布局处理
布局管理分两步执行:象形符号生成和象形符号的布局。
文本管理通过懒加载的方式处理布局。总的来说,布局管理NSLayoutManager的一些方法会触发象形符号的生成,对于象形符号的布局同样如此,生成象形符号会计算它们的布局位置,LayoutManager会缓存信息以提高随后调用的性能。
图示2:文本布局的处理

 ns_layout_manager_diagram.gif

象形符号的绘制
除了生成象形符号和执行布局,layoutManager会在textView中的绘制指定的象形符号,textView会让layoutManager在view的指定区域内布局并展示。
图示3: 视图(view)、容器(container)、行区域坐标(line fragment coordinates)

 origin.gif

收藏
2
sina weixin mail 回到顶部