iOS 中的 CTM 变换与仿射变换(用于平移、旋转、缩放)
CTM transforms vs Affine Transforms in iOS (for translate, rotate, scale)
我通读了 Quartz 2D 编程指南中的 Transforms 文档。其中似乎有两种进行转换的方法。一种方法是修改电流变换矩阵 (CTM)。它有如下方法:
CGContextTranslateCTM
CGContextRotateCTM
CGContextScaleCTM
另一种方法是使用仿射变换。它有如下方法:
CGAffineTransformTranslate
CGAffineTransformRotate
CGAffineTransformScale
文档状态
The affine transform functions available in Quartz operate on matrices, not on the CTM.
但我不明白这对我有什么实际影响。似乎我可以使用任何一种方法得到相同的结果。什么时候应该使用 CTM 变换,什么时候应该使用仿射变换?
CTM 是当前变换矩阵,CTM 方法将对当前矩阵进行操作。
其他版本的函数将对给定矩阵进行变换,这意味着您需要指定要变换的矩阵。执行此操作后,您可以以任何方式将转换应用于 CTM,或将其用于任何其他目的。
例如,这两个操作是相同的:
CGContextTranslateCTM(context, 10, 10);
仿射:
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 10, 10);
CGContextConcatCTM(context, transform);
如您所见,第一个或多或少只是一种方便,因此您不需要编写那么多代码。
我通读了 Quartz 2D 编程指南中的 Transforms 文档。其中似乎有两种进行转换的方法。一种方法是修改电流变换矩阵 (CTM)。它有如下方法:
CGContextTranslateCTM
CGContextRotateCTM
CGContextScaleCTM
另一种方法是使用仿射变换。它有如下方法:
CGAffineTransformTranslate
CGAffineTransformRotate
CGAffineTransformScale
文档状态
The affine transform functions available in Quartz operate on matrices, not on the CTM.
但我不明白这对我有什么实际影响。似乎我可以使用任何一种方法得到相同的结果。什么时候应该使用 CTM 变换,什么时候应该使用仿射变换?
CTM 是当前变换矩阵,CTM 方法将对当前矩阵进行操作。
其他版本的函数将对给定矩阵进行变换,这意味着您需要指定要变换的矩阵。执行此操作后,您可以以任何方式将转换应用于 CTM,或将其用于任何其他目的。
例如,这两个操作是相同的:
CGContextTranslateCTM(context, 10, 10);
仿射:
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 10, 10);
CGContextConcatCTM(context, transform);
如您所见,第一个或多或少只是一种方便,因此您不需要编写那么多代码。