一、核心文本
Core Text是一种用于布置文字和处理字体的先进的低级技术。在Mac OS X v10.5和iOS 3.2中引入的Core Text API可从所有OS X和iOS环境访问。
重要提示: Core Text适用于必须在低级别进行文本布局和字体处理的开发人员,例如布局引擎的开发人员。
如果可能,您应该使用更高级别的框架开发应用程序,也就是说,在iOS中使用Text Kit或OS X中的Cocoa文本系统)。
核心文本是这些文本系统的基础技术,所以它们的速度和效率是共享的。此外,Text Kit 和Cocoa Kit提供丰富的文本编辑,功能齐全的页面布局引擎和其他基础架构,您的应用程序如果单独使用核心文本则需要提供。
二、概述
Core Text适用于需要与Core Graphics框架(Quartz)相关的低级文本处理技术的应用程序。
如果您直接使用Quartz并且需要绘制一些文本,请使用Core Text。
例如,如果您有自己的页面布局引擎 - 您有一些文本,并且您知道需要在视图中进行的位置 - 您可以使用Core Text生成字形并将它们相对定位,并具有所有的功能精细排版,如字距调整,连字,断线,连字符和对齐。
Core Text Lays Out Text(核心文本布局文本)
核心文本生成字形(从字符代码和字体数据),并在字形运行中将它们相对于彼此定位。它将字形运行成行,并将线组合成多行框架(如段落)。核心文本还提供字形和布局相关数据,如字形位置和线和帧的测量。它处理字符属性和段落样式,包括各种类型的选项卡样式和定位。
使用核心文本管理字体
Core Text字体API提供字体,字体集合,字体描述符和容易访问字体数据。它还支持多种主字体,字体变体,字体级联和字体链接。Core Text为Quartz提供了一种替代方法,用于将您自己的字体加载到当前进程中,即字体激活。
三、CoreText的优劣
UIWebView也是复杂的文字排版的备选方案。对于排版,基于CoreText和基于UIWebView
相比,前者有如下好处:
- CoreText 占用的内存更少,渲染速度快,UIWebView 占用的内存更多,渲染速度慢。
- CoreText 在渲染界面前就可以精确地获得显示内容的高度(只要有了 CTFrame 即可),而 UIWebView 只有渲染出内容后,才能获得内容的高度(而且还需要用 javascript 代码来获取)
- CoreText 的 CTFrame 可以在后台线程渲染,UIWebView 的内容只能在主线程(UI 线程)渲染。
- 基于 CoreText 可以做更好的原生交互效果,交互效果可以更细腻。而 UIWebView 的交互效果都是用 javascript 来实现的,在交互效果上会有一些卡顿存在。例如,在 UIWebView 下,一个简单的按钮按下效果,都无法做到原生按钮的即时和细腻的按下效果。
当然,基于 CoreText 的排版方案也有一些劣势:
- CoreText 渲染出来的内容不能像 UIWebView 那样方便地支持内容的复制。
- 基于 CoreText 来排版需要自己处理很多复杂逻辑,例如需要自己处理图片与文字混排相关的逻辑,也需要自己实现链接点击操作的支持。
Core Text中的所有单独功能都是线程安全的。字体对象(CTFont,CTFontDescriptor和关联对象)可以由多个操作,工作队列或线程同时使用。但是,布局对象(CTTypesetter,CTFramesetter,CTRun,CTLine,CTFrame和关联对象)应该在单个操作,工作队列或线程中使用。
在业界,很多应用都采用了基于CoreText技术的排版方案,例如:新浪微博客户端,多看阅读客户端。
注意事项: Core Text中的所有单独功能都是线程安全的。字体对象(CTFont,CTFontDescriptor和关联对象)可以由多个操作,工作队列或线程同时使用。但是,布局对象(CTTypesetter,CTFramesetter,CTRun,CTLine,CTFrame和关联对象)应该在单个操作,工作队列或线程中使用。