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 一些事的更多相关文章

  1. Text Kit进阶

    在上一篇文章Text Kit入门中我们主要了解了什么是Text Kit及它的一些架构和基本特性,这篇文章中会涉及关于Text Kit的更多具体应用. Text Kit是建立在Core Text框架上的 ...

  2. iOS富文本(三)深入使用Text Kit

    在上一篇中介绍了Text Kit的三种基本组件的关系并且简单的实现了怎么使用这三种基本组件,本片将深入的去使用这三种基本组件. NSTextStorage NSTextStorage是NSMutabl ...

  3. iOS富文本(二)初识Text Kit

    概述 Text Kit 是建立在Core Text上的文本布局系统,虽然没有Core Text那么强大的文本处理功能,但是对于大多数常见的文本布局用Text Kit能够很简单的实现,而不是用Core ...

  4. Text Kit入门

    更详细的内容可以参考官方文档 <Text Programming Guide for iOS>. “Text Kit指的是UIKit框架中用于提供高质量排版服务的一些类和协议,它让程序能够 ...

  5. ios7新特性1-UI变化、UIKit动态行为支持与Text Kit新接口

    iOS 7.0新特性1 iOS 7的UI经过了重新设计.另外,iOS7中引入了新的动画系统,便于创建2D和2.5D的游戏.多任务支持提升,点对点通讯以及其他重要的特征使iOS7相对于以往的SDK来说发 ...

  6. Core Text概述

    本文是我翻译的苹果官方文档<Core Text Overview> Core Text框架是高级的底层文字布局和处理字体的技术.它在Mac OS X v10.5 and iOS 3.2开始 ...

  7. CoreText学习(一)Base Objects of Core Text

    最近要做一个读入Word,PDF格式等的文件并且加以编辑的程序,本来以为使用Text Kit结合Text View来打开doc文件是完全没问题的,结果用了各种方法打开要么是数据是nil,要么打开的文字 ...

  8. Text Relatives

    [Text Relatives] With TextKit the resources at your disposal range from framework objects—such as te ...

  9. 基于Core Text实现的TXT电子书阅读器

    本篇文章的项目地址基于Core Text实现的TXT电子书阅读器. 最近花了一点时间学习了iOS的底层文字处理的框架Core Text.在网上也参考很多资料,具体的资料在文章最后列了出来,有兴趣的可参 ...

随机推荐

  1. Wp8无广告 锁屏可以持续用的手电筒

    前面的博文写了怎么实现手电筒,界面不够漂亮 我修改了界面之后 提交到了微软的App商店 在这里送上下载地址: http://www.windowsphone.com/zh-cn/store/app/% ...

  2. selenium之定位以及切换frame

    总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切,frame需层层切! 很多人在用selenium定位页面元素的时候会遇到定位不到的问题,明明元素就在那儿,用firebug ...

  3. 学习笔记3——WordPress文件目录结构详解

    **********根目录********** 1.index.php:WordPress核心索引文件,即博客输出文件.2.license.txt:WordPress GPL许可证文件.3.my-ha ...

  4. 第42届亚洲区域赛青岛站(2017icpc青岛)经验总结以及一些感想

    上一次写这种东西还是天梯赛,当时打完心里也是挺激动的,然后我们队也没有去参加省赛,但是过了一段时间我还是从那里面恢复了出来.因为我当时确实还是很菜的,当时连个暴力都不会,看着自己仅过的那些百度的题目确 ...

  5. ListView虚拟模式封装

    public class ListViewAH : ListViewEx { #region 虚拟模式相关操作 ///<summary> /// 前台行集合 ///</summary ...

  6. iOS控件-3级城市列表-plist版

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  7. BZOJ 2820 YY的GCD ——莫比乌斯反演

    我们可以枚举每一个质数,那么答案就是 $\sum_{p}\sum_{d<=n}\mu(d)*\lfloor n / pd \rfloor *\lfloor m / pd \rfloor$ 直接做 ...

  8. 刷题总结——蚯蚓(NOIP2016DAY2T2)

    题目: 题目背景 NOIP2016 提高组 Day2 T2 题目描述 本题中,我们将用符号 

  9. [配置Cordova环境] [Alfred使用手册]

    Mac神器 Alfred使用手册http://www.tuicool.com/articles/YJJv2i 配置Cordova环境 1.到nodejs官网下载最新版本,安装pkg文件 2.终端运行 ...

  10. 【黑科技】读写优化 orz bdd

    转自 bdd :http://www.cnblogs.com/kevince/p/3924688.html 读入优化: inline int read() { char ch; bool flag = ...