CGContextSetTextMatrix 的作用是什么?

use*_*972 5 core-text ios

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

\n
void CGContextSetTextMatrix (\n   CGContextRef c,\n   CGAffineTransform t\n);\n
Run Code Online (Sandbox Code Playgroud)\n

参考资料并不是那么有帮助。:(

\n
\n

设置当前文本矩阵。

\n

文本矩阵指定从文本空间到用户空间的变换。为了生成用于在页面上实际绘制文本的最终文本渲染矩阵,Quartz 将文本矩阵与当前变换矩阵和图形状态中的其他参数连接起来。

\n

注意,文本矩阵不是图形状态的一部分\xe2\x80\x94保存或恢复图形状态对文本矩阵没有影响。文本矩阵是图形上下文的属性,而不是当前字体的属性。”

\n
\n

你能给我解释一下吗?

\n

Rob*_*ier 5

文本矩阵是应用于文本的特殊变换。您可以使用它来更改使用 Core Text(或之前已弃用的 Core Graphics)绘制的文本的方向CGContextShowText。在 iOS 上,Core Text 和 Core Graphics 有不同的坐标系。通常,您可以通过翻转 Core Graphics 坐标系来解决此问题,但也可以翻转文本矩阵,尽管我不建议这样做,除非非常简单的文本(它会弄乱文本布局)。

(为什么?!?!?他问,它们会有不同的坐标系吗?好吧,因为当 iPhoneOS 出现时,Apple 决定 iPhone 开发人员希望原点位于 Windows 上的左上角,而不是左下角。数学家和 Mac 开发人员已经习惯了。所以他们翻转了坐标系,但是当他们从 Mac 移植 Core Text 时,他们保留了它的坐标系,这对于我们所有可以移植复杂文本布局代码的人来说非常好很容易就完成了,我确信它极大地简化了移植,并且......好吧......原因。并不是说这与文本矩阵有任何关系;它自 10.0 以来就存在,并且存在以便您可以旋转文本。)

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

CGContextSetTextMatrix(context, CGAffineTransformIdentity);
Run Code Online (Sandbox Code Playgroud)

如果您使用 UIKit 绘制文本,这当然不是必需的。UIKit 将为您处理所有这些。