如何一次使用CGAffineTransformMakeScale和Rotation?

时间:2009-12-13 07:12:48

标签: iphone core-graphics cgaffinetransform

((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeScale(.5,.5);

一次只做其中一件作品。如何保存转换然后应用另一个? 干杯

3 个答案:

答案 0 :(得分:24)

为了扩展彼得所说的内容,你会想要使用如下代码:

CGAffineTransform newTransform;
newTransform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformScale(newTransform,.5,.5);

CGAffineTransformMake ...函数从头开始创建新的转换,其他的转换连接。视图和图层一次只能应用一个变换,因此这就是您一次在视图上创建多个缩放,旋转和平移效果的方法。

您需要注意连接转换的顺序,以达到正确的效果。

答案 1 :(得分:9)

来自Apple文档:

  

CGAffineTransformConcat返回一个   仿射变换矩阵   结合两个现有的   仿射变换。

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);
  

参数t1第一个仿射   变换。

     

t2第二个仿射变换。这个   仿射变换连接到   第一次仿射变换。

     

返回值一个新的仿射   变换矩阵。也就是说,t'=   T1 * T2。

     

讨论连词结合了两个   仿射变换矩阵   将它们相乘。你可能会   执行几个连接   为了创造一个仿射   包含累积的变换   几种转变的影响。

     

请注意,矩阵运算不是   可交换的 - 你的顺序   连接矩阵很重要。   也就是乘法的结果   矩阵t2的矩阵t1没有   必然等于结果   将矩阵t2乘以矩阵t1。

答案 2 :(得分:2)

  

一次只做其中一件作品。

是的,因为你用第二个替换了第一个。

  

如何保存转换然后应用其他转换?

Concatenate them together,并将结果矩阵分配给属性。

您可以将变换矩阵存储在CGAffineTransform类型的变量中;你可以将它用于更复杂的转换中的中间步骤,或者使代码更清晰(或两者兼而有之)。