CGContextSetTextMatrix有什么作用?

时间:2014-05-07 20:16:05

标签: ios core-text

我不确定这个功能是做什么或应该做什么。

void CGContextSetTextMatrix (
   CGContextRef c,
   CGAffineTransform t
);

The reference并非全部有用。 :(

  

设置当前文本矩阵。

     

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

     

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

你能解释一下吗?

1 个答案:

答案 0 :(得分:3)

文本矩阵是一种应用于文本的特殊变换。您可以使用它来更改使用Core Text(或者在不推荐CGContextShowText之前使用Core Graphics)绘制的文本的方向。在iOS上,Core Text和Core Graphics具有不同的坐标系。通常你可以通过flipping the Core Graphics coordinate system来解决这个问题,但是可以翻转文本矩阵,虽然除了非常简单的文本之外我不推荐它(它会混淆文本布局)。

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

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

CGContextSetTextMatrix(context, CGAffineTransformIdentity);

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