Swift CGAffineTransform变换操作执行顺序相关问题咨询
CGAffineTransform 执行顺序问题解答
你所列的三个理解全部正确,Core Graphics 中仿射变换的组合遵循「后拼接的变换先执行」的核心规则,本质是因为其采用行向量右乘矩阵的计算逻辑,组合矩阵最右侧的变换会最先作用到坐标上。对应每个问题的具体说明如下:
- 针对问题1:
CGAffineTransform(A).scaledBy(B)本质是将B对应的缩放矩阵拼接在A变换矩阵的右侧,对myCgRect应用该组合变换时,会先执行B的缩放操作,再执行A对应的变换,你的判断正确。 - 针对问题2:
CGAffineTransform(A).concatenating(CGAffineTransform(B))得到的组合矩阵为A * B,应用到坐标时的执行顺序为先执行B对应的变换,再执行A对应的变换,你的判断正确。 - 针对问题3:
scaledBy()、translatedBy()、rotatedBy()均为变换拼接的便捷方法,逻辑和concatenating()完全一致,都是将括号内对应操作的变换矩阵拼接在原有变换矩阵的右侧,所以会先执行括号内的缩放/平移操作,再执行原有A对应的变换,你的判断正确。
内容的提问来源于stack exchange,提问作者JeanDujardin
相关产品推荐
相关产品推荐

