关于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】Jewels and Stones(宝石与石头)
这道题是LeetCode里的第771道题. 题目要求: 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝 ...
- 【Luogu】P2912牧场散步(TarjanLCA)
题目链接 老天……终于碰上一个除了模板之外的LCA题了 这道题用Tarjan来LCA.树上两个点的路径是唯一的,所以钦定一个根,两点间的路径就是两点到根的路径减去双倍的公共祖先到根的路径.大概很好理解 ...
- 雅礼培训 Problem A 【线段树】
题意 维护一段区间,支持求区间最大值,区间且,区间或 \(n,q<=2*10^5\) 题解 我们用线段树维护区间最大值 对于and和or运算, and实质就是强行把一些位改为0 or实质就是强行 ...
- 刷题总结——动态逆序对(bzoj3295)
题目: Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素 ...
- 【FFT求卷积】Problem D. Duel
[AC] #include <stdio.h> #include <iostream> #include <string.h> #include <algor ...
- ngrinder的idea脚本开发环境配置
1.安装toriseSvn,安装一定要选择comandline (默认是没选择的) 2.下载groovy,解压缩,在开发工具(ps:idea,eclipse)中设置groovy安装路径 3.在网站处创 ...
- 洛谷P3393 逃离僵尸岛
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- linux基础命令之一
1.cpio cpio(copy in/out) 功能说明:备份文件. 语 法:cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][-H &l ...
- Linux crontab 定时任务Demo
# 查看定时任务 crontab -l #编辑定时任务crontab -e # 同步时间 */ * * * * /usr/sbin/ntpdate -u 127.0.0.1 # 定时删除文件 */ * ...
- msp430项目编程41
msp430综合项目---红外遥控直流电机调速系统41