为什么变换顺序在Xcode中很重要?

时间:2014-03-25 08:26:35

标签: xcode core-animation transform

这两个序列在​​应用此变换的图像层中给出两个不同的结果。我似乎没有理由......有人可以给出解释吗?

/* first sequence of transformation */
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformRotate(transform, M_PI / 180 * 30);
transform = CGAffineTransformTranslate(transform, 100, 0);

/* second sequence of transformation */
CGAffineTransform transform = CGAffineTransformIdentity;
transform = CGAffineTransformTranslate(transform, 100, 0);
transform = CGAffineTransformRotate(transform, M_PI / 180 * 30);

1 个答案:

答案 0 :(得分:7)

短(技术)答案:因为变换实际上只是一个矩阵,当你连接两个变换时,两个矩阵相乘。矩阵乘法不是commutative,意味着A(A B)与⨉(B A)不同。换句话说,订单很重要。

我之前写过关于combining translations and rotationsthe math behind transforms的文章(即进入矩阵数学)。如果您想了解有关变换如何工作的更多信息,这两个资源可能是很好的资源。

project by Richard Turton上还有一个很好的GitHub用于试验变换,这对于掌握不同变换的顺序如何影响最终结果的概念非常有用。