CGContextSetTextMatrix是做什么用的?

4

我不确定这个函数是做什么的或者应该做什么。

void CGContextSetTextMatrix (
   CGContextRef c,
   CGAffineTransform t
);
这篇参考文献不是很有帮助。 :(
设置当前的文本矩阵。文本矩阵指定了从文本空间到用户空间的变换。为了生成实际在页面上绘制文本所使用的最终文本渲染矩阵,Quartz将文本矩阵与当前的变换矩阵和图形状态中的其他参数连接起来。
请注意,文本矩阵不是图形状态的一部分——保存或恢复图形状态对文本矩阵没有影响。文本矩阵是图形上下文的属性,而不是当前字体的属性。
你能给我解释一下吗?
1个回答

5

文本矩阵是一种特殊的转换,应用于文本。您可以使用它来更改使用Core Text绘制的文本的方向(或在CGContextShowText被弃用之前使用的Core Graphics)。在iOS上,Core Text和Core Graphics具有不同的坐标系。通常,您可以通过翻转Core Graphics坐标系来解决这个问题,但是翻转文本矩阵也是可能的,尽管我不建议除非只处理非常简单的文本(它会破坏文本布局)。

(为什么???他问道,他们为什么会有不同的坐标系?嗯,因为当iPhoneOS出现时,苹果决定iPhone开发人员希望原点在左上角,就像Windows一样,而不是数学家和Mac开发人员习惯的左下角。所以他们翻转了坐标系,但是当他们从Mac移植Core Text时,他们保留了它的坐标系,这对我们所有复杂文本布局代码的人来说非常好,我们可以轻松地进行移植,我相信这显著简化了移植过程... 嗯...原因。这与文本矩阵无关;自10.0以来,它一直存在,可以用于旋转文本。)

由于文本矩阵没有为您初始化,使用低级框架绘制文本之前最好始终进行初始化。您可以像这样进行初始化:

CGContextSetTextMatrix(context, CGAffineTransformIdentity);

当然,如果您使用UIKit绘制文本,则不需要这样做。 UIKit将为您处理所有这些内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接