CTM转换与iOS中的仿射变换(用于翻译,旋转,缩放)

时间:2015-06-10 12:51:27

标签: ios transformation cgaffinetransform

我通读了Quartz 2D Programming Guide中的Transforms文档。其中似乎有两种方法可以进行转换。一种方法是修改当前转换矩阵(CTM)。它有如下方法:

  • CGContextTranslateCTM
  • CGContextRotateCTM
  • CGContextScaleCTM

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

  • CGAffineTransformTranslate
  • CGAffineTransformRotate
  • CGAffineTransformScale

文档状态

  

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

但我不明白这实际上是如何影响我的。看起来我可以使用任何一种方法获得相同的结果。我什么时候应该使用CTM变换?什么时候应该使用仿射变换?

1 个答案:

答案 0 :(得分:2)

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

其他版本的函数将在给定矩阵上进行转换,这意味着您需要指定要转换的矩阵。在您这样做之后,您可以以任何您想要的方式将变换应用于CTM,或将其用于任何其他目的。

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

CGContextTranslateCTM(context, 10, 10);

仿射:

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

正如您所看到的,第一个或多或少只是一个便利,所以您不需要编写这么多代码。