这些天学习了一下图文混排,相关基础知识点,前面绘制纯文本文章已经介绍,今天主要看一下图文混排的实现。
CoreText图文混排实现的过程
CoreText实现图文混排其实就是在富文本中插入一个空白的富文本字符串作为图片占位符,通过代理设置相关的图片尺寸信息,根据从富文本得到的frame计算图片绘制的frame然后再绘制图片的过程。
具体分析:
Core Text
本身并不支持图片绘制,图片的绘制你还得通过
Core Graphics
来进行。只是
Core Text
可以通过
CTRun
的设置为你的图片在文本绘制的过程中留出适当的空间。这个设置就使用到
CTRunDelegate
了,
CTRunDelegate
作为
CTRun
相关属性或操作扩展的一个入口,使得我们可以对
CTRun
做一些自定义的行为。为图片留位置的方法就是加入一个空白的
CTRun
,自定义其
ascent
,
descent
,
width
等参数,使得绘制文本的时候留下空白位置给相应的图片。然后图片在相应的空白位置上使用
Core Graphics
接口进行绘制。
使用
CTRunDelegateCreate
可以创建一个
CTRunDelegate
,它接收两个参数,一个是
callbacks
结构体,一个是所有
callback
调用的时候需要传入的对象。
callbacks
的结构体为
CTRunDelegateCallbacks
,主要是包含一些回调函数,比如有返回当前
run
的
ascent
,
descent
,
width
这些值的回调函数,至于函数中如何鉴别当前是哪个
run
,可以在
CTRunDelegateCreate
的第二个参数来达到目的,因为
CTRunDelegateCreate
的第二个参数会作为每一个回调调用时的入参。
CoreText 与UIWebView在排版方面的优劣比较