如何使用CoreText在富文本中绘制图像?(IOS)

Eon*_*nil 9 text image core-text

我可以使用Core Text绘制富文本,问题是将图像与文本一起流动.(iOS SDK 4.1)

我试着绘制某种富文本.问题是设计师在文本中放置了许多图标.所以我要绘制的文字是这样的:

Here is a word <an icon image>, and another words.
The image(<another icon>) should be placed like a glyph.
It's part of text, not an example.
Run Code Online (Sandbox Code Playgroud)

<icon>是图像.(这不是代码.只是一个例子.)

我可以通过手动布局所有这些来绘制它,但是保持复杂的文本布局行为太难了.所以我找到了一种用Core Text绘制它的方法.

Eon*_*nil 9

我得到了解决方案

布置非文本内容的关键是CTRunDelegate. Core Text不支持非文本内容,因此您必须为它们创建空格,并在以后绘制或放置它们.

NSAttributedString属性的一部分kCTRunDelegateAttributeName将调用已注册的回调来确定每个字形的宽度.这将允许您为每个非文本对象创建空格.

但是,在绘制文本后Core Text,使用frame/line/run存储的布局信息将无效.所以你必须在使用framesetter/typesetter进行布局之后,但在绘制之前绘制/放置非文本内容.

此链接描述了CTRunDelegate的基本用法:
如何在iPad中使用CTRunDelegate?


Core Text存在问题.最初,CTRunDelegate旨在通过CTRunDelegateCallbacks.getAscent和支持可变宽度和垂直对齐CTRunDelegateCallbacks.getDescent.但垂直对齐功能目前不起作用.这可能是一个错误.

我在这里描述了这个问题: 在iOS中使用Core Text对齐多个大小的文本垂直中心而不是基线

如果您有关于此问题的信息,请在链接中查看我的问题.