CTM 变换与 iOS 中的仿射变换(用于平移、旋转、缩放)



我通读了Quartz 2D编程指南中的转换文档。其中似乎有两种进行转换的方法。一种方法是通过修改电流转换矩阵 (CTM)。它具有如下方法:

  • CGContextTranslateCTM
  • CGContextRotateCTM
  • CGContextScaleCTM

另一种方法是使用仿射变换。它具有如下方法:

  • CGAffineTransformTranslate
  • CGAffineTransformRotate
  • CGAffineTransformScale

文档状态

Quartz 中可用的仿射变换函数在矩阵上运行,而不是在 CTM 上运行。

但我不明白这对我有什么实际影响。似乎我可以使用任何一种方法获得相同的结果。何时应使用 CTM 变换,何时应使用仿射变换?

CTM是一个当前的变换矩阵,CTM方法将对当前矩阵进行操作。

另一个版本的函数将在给定矩阵上进行转换,这意味着您需要指定要尝试转换的矩阵。执行此操作后,您可以根据需要将转换应用于 CTM,或将其用于任何其他目的。

例如,这两个操作将是相同的:

CGContextTranslateCTM(context, 10, 10);

仿射:

CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 10, 10);
CGContextConcatCTM(context, transform);

如您所见,第一个或多或少只是一种方便,因此您无需编写太多代码。

最新更新