关于Text Kit 一些事
1. Text Kit 是什么?
在iOS7中,苹果引入了Text Kit——Text Kit是一个高速而又现代化的文字排版和渲染引擎。Text Kit在UIKit framework中的定义了一些类和相关协议,它最基本的作用就是为程序提供文字排版和渲染的功能。在程序中。通过Text Kit能够对文字进行存储(store)、布局(lay out)。以及用最精细的排版方式(比如文字间距、换行和对齐等)来显示文本内容。苹果引入Text Kit的目的并不是要代替已有的Core
Text,Core Text的主要作用也是用于文字的排版和渲染中,它是一种先进而又处于底层技术,假设我们须要将文本内容直接渲染到图形上下文(Graphics context)时,从性能和易用性来考虑。最佳方案就是使用Core Text。
而假设我们直接利用苹果提供的一些控件(比如UITextView、UILabel和UITextField等)对文字进行排版,无疑就是借助于UIkit framework中Text Kit提供的API。
2. Text Kit 能干什么?
- 对文字进行分页或多列排版
- 支持文字的换行、折叠和着色等处理
- 能够调整字与字之间的距离、行间距、文字大小、指定特定的字体
- 支持富文本编辑,能够自己定义文字截断
- 支持动态样式
- 支持凸版印刷效果(letterpress)
- 围绕路径
- 动态文本格式及存储
- 支持数据类型的检測(比如链接、附件等)
具体參考:http://blog.jobbole.com/51965/
3. Text Kit 的架构 & 原理
以下,我们通过图1(此图来自WWDC2013 Session 210)来了解一下Text Kit的架构。图1是基于iOS 7绘制的,从图中,我们能够看到Text Kit是基于Core Text构建的。它通过Core Text与Core Graphics进行交互。而UI控件(UILabel、UITextField和UITextView)则构建于Text Kit之上,可见这些文本控件能够利用Text Kit提供的API来对文字进行排版和渲染处理。从图中我们也能够看到SDK提供的UIWebView是基于WebKit的,它不能使用Text
Kit提供的功能。
图1
Text Kit在iOS 7 SDK中的位置
我们再来看看图1中的相关组件在iOS6里面是怎样相应的,如图2所看到的,能够看出在iOS 6中是没有Text Kit,而且UILabel、UIText和UITextView是基于String Drawing和WebKit构建的。当中String Drawing是与Core Graphics直接通讯。

图2 在iOS 6中并没有Text Kit
原理 & 实践 牛人写的已经非常多了,具体參考例如以下链接
破船出品
http://beyondvincent.com/blog/2013/11/12/121-brief-analysis-text-kit/
raywenderlich Tutorials(链接为中文)
http://www.raywenderlich.com/zh-hans/53890/text-kit-%E6%95%99%E7%A8%8B%EF%BC%88%E4%B8%80%EF%BC%89
http://www.raywenderlich.com/zh-hans/53889/text-kit-%E6%95%99%E7%A8%8B%EF%BC%88%E4%BA%8C%EF%BC%89
4. 相关代码 && 进阶资料
苹果官方演示样例:
- IntroToTextKit
苹果官方參考文档:
- Text Programming Guide for iOS.pdf
- Core Text Programming Guide
- NSLayoutManager Class Reference for iOS.pdf
- NSLayoutManagerDelegate Protocol Reference for iOS.pdf
- NSTextContainer Class Reference for iOS.pdf
- NSTextStorage Class Reference for iOS.pdf
- NSTextStorageDelegate Protocol Reference for iOS.pdf
wwdc视频:
- Introducing Text Kit
- Advanced Text Layouts and Effects with Text Kit
- Using Fonts with Text Kit
关于Text Kit 一些事的更多相关文章
- Text Kit进阶
在上一篇文章Text Kit入门中我们主要了解了什么是Text Kit及它的一些架构和基本特性,这篇文章中会涉及关于Text Kit的更多具体应用. Text Kit是建立在Core Text框架上的 ...
- iOS富文本(三)深入使用Text Kit
在上一篇中介绍了Text Kit的三种基本组件的关系并且简单的实现了怎么使用这三种基本组件,本片将深入的去使用这三种基本组件. NSTextStorage NSTextStorage是NSMutabl ...
- iOS富文本(二)初识Text Kit
概述 Text Kit 是建立在Core Text上的文本布局系统,虽然没有Core Text那么强大的文本处理功能,但是对于大多数常见的文本布局用Text Kit能够很简单的实现,而不是用Core ...
- Text Kit入门
更详细的内容可以参考官方文档 <Text Programming Guide for iOS>. “Text Kit指的是UIKit框架中用于提供高质量排版服务的一些类和协议,它让程序能够 ...
- ios7新特性1-UI变化、UIKit动态行为支持与Text Kit新接口
iOS 7.0新特性1 iOS 7的UI经过了重新设计.另外,iOS7中引入了新的动画系统,便于创建2D和2.5D的游戏.多任务支持提升,点对点通讯以及其他重要的特征使iOS7相对于以往的SDK来说发 ...
- Core Text概述
本文是我翻译的苹果官方文档<Core Text Overview> Core Text框架是高级的底层文字布局和处理字体的技术.它在Mac OS X v10.5 and iOS 3.2开始 ...
- CoreText学习(一)Base Objects of Core Text
最近要做一个读入Word,PDF格式等的文件并且加以编辑的程序,本来以为使用Text Kit结合Text View来打开doc文件是完全没问题的,结果用了各种方法打开要么是数据是nil,要么打开的文字 ...
- Text Relatives
[Text Relatives] With TextKit the resources at your disposal range from framework objects—such as te ...
- 基于Core Text实现的TXT电子书阅读器
本篇文章的项目地址基于Core Text实现的TXT电子书阅读器. 最近花了一点时间学习了iOS的底层文字处理的框架Core Text.在网上也参考很多资料,具体的资料在文章最后列了出来,有兴趣的可参 ...
随机推荐
- Leetcode 377.组合总和IV
组合总和IV 给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数. 示例: nums = [1, 2, 3] target = 4 所有可能的组合为: (1, 1, 1, ...
- hdu 4251 The Famous ICPC Team Again划分树入门题
The Famous ICPC Team Again Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- iOS代理转移
在控制器里面想调用一个视图的子视图的代理方法很简单 1.找到子视图的协议和代理属性 2.给你想调用的控件添加代理属性,遵守的协议和子视图的一样 3.重写代理属性的set方法
- xmpp 登录注册小结
将XMPPStream放在APPDelegate,以便全局访问 #pragma mark - XMPP相关的属性和方法定义 /** * 全局xmppstream,只读属性 */ @property ( ...
- 【Luogu】P1613跑路(倍增+Floyd)
题目链接在此 其实我看到这道题一点想法都没有 设f[i][j][k]表示用2i秒能不能从j走到k.如果可以,那j到k就可以一秒走到,它们的路径长度就是1.方程为f[i][j][k]=f[i-1][j] ...
- HDU——4549M斐波那契数列(矩阵快速幂+快速幂+费马小定理)
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Su ...
- Oracle学习笔记整理手册
文章目录(1)Oracle正则匹配使用(2)Oracle修改有数据的数据字段类型(3)Oracle表数据回滚语句(4)sql筛选出记录数大于2的记录(5)oracle同义词(6)oracle内外连接( ...
- BZOJ 3527 [Zjoi2014]力 ——FFT
[题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...
- [SDOI2008]仪仗队 (欧拉函数)
题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...
- getParameter 与 getAttribute的区别
request.getAttribute():是request时设置的变量的值,用request.setAttribute("name","您自己的值");来设 ...