CoreText

CoreText初步(是什么,可以用来干什么)

2019-08-06  本文已影响0人  LiuffSunny

一·CoreText是什么

苹果的文档中对CoreText的描述如下

官网文档:https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CoreText_Framework_Ref/_index.html

Core Text is an advanced, low-level technology for laying out text and handling fonts. Core Text works directly with Core Graphics (CG), also known as Quartz, which is the high-speed graphics rendering engine that handles two-dimensional imaging at the lowest level in OS X and iOS.

翻译过来的意思就是:CoreText是一种高级的底层技术, 用于布局文本和处理字体。CoreText直接与Core Graphics (CG) 一起工作, 也称为Quartz, 它是在 OS X 和 iOS 的最底层的处理二维成像的高速图形渲染引擎。

CoreText是Mac OS和iOS系统中处理文本的low-level API, 不管是使用OC还是swift, 实际我们使用CoreText都还是间接或直接使用C语言在写代码。CoreText是iOS和Mac OS中文本处理的根基, TextKit和WebKit都是构建于其上。
注意:这个是 iOS7 之后的架构图,在 iOS7 以前,并没有图中的 Text Kit 类,不过 CoreText 仍然是处在最底层直接和 Core Graphics 打交道的模块。


2903435-c9739ac0350fc7ba.png

二.CoreText可以做什么

1.当前项目中的应用

-协议弹窗


345.png

-特殊文字显示


123.png

2.图文混排

456.png

三.CoreText的元素内容有哪些

1.架构流程图和CoreText框架基础

CoreText在文本布局和处理字体过程是很高效的,因为CoreText能直接使用CoreGraphics。而CoreGraphics是OSX和iOS平台非常高效的二维成像渲染引擎。CoreText在上层框架与底层框架之间起到了桥梁的作用,把上层框架提供的文本布局信息(例如:字体、颜色、行间距)等信息转化为CoreGraphics能直接使用的数据类型(例如CTFrame、CTLIne、CTRun、CTFout)。CoreText提供的数据类型CoreGraphics能直接使用,所以使用CoreText渲染文本是效率非常高的。


CoreText架构图.png

常用类、属性

CTFrameRef

CTFramesetterRef

CTLineRef

CTRunRef

CTTypesetterRef

CTGlyphInfoRef (NSGlyphInfo)

CTParagraphStyleRef (NSParagraphStyle)

CTFontRef (UIFont)

CFArrayRef (NSArray)

2.CoreText元素

字体结构

字体结构.png CoreText元素图.png
  • CTFrame可以想象成画布, 画布的大小范围由CGPath决定

2、通过 CFAttributedStringRef 生成 CTFramesetter

3、通过CTFramesetter得到CTFrame

4、绘制 (CTFrameDraw)

5、如果有图片存在,先在AttributedString 对应位置添加占位符

6、通过回调函数确定图片的宽高(CTRunDelegateCallbacks)

7、遍历到对应CTRun上、获取对应CGRect、绘制图片(CGContextDrawImage)
1.使用core text就是先有一个要显示的string,然后定义这个string每个部分的样式->attributedString -> 生成 CTFramesetter -> 得到CTFrame -> 绘制(CTFrameDraw)
其中可以更详细的设置换行方式,对齐方式,绘制区域的大小等。
2.绘制只是显示,点击事件就需要一个判断了。
CTFrame 包含了多个CTLine,并且可以得到各个line的其实位置与大小。判断点击处在不在某个line上。CTLine 又可以判断这个点(相对于ctline的坐标)处的文字范围。然后遍历这个string的所有NSTextCheckingResult,根据result的rang判断点击处在不在这个rang上,从而得到点击的链接与位置。

四.如何使用CoreText

CoreText是需要自己处理绘制,不像UILabel等最上层的控件 ,所以我们必须在drawRect中绘制,为了更好地使用,我们需要自定义一个UIView。

转换坐标系

UIKit的坐标系原点是在右上角,CoreText的坐标原点是在左下角,并且绘制的内容是颠倒的,所以需要进行坐标转换,绘制的内容显示才能正常

781681-20160107095453075-2053394561.png.jpg
上一篇下一篇

猜你喜欢

热点阅读