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

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

4

3 回答 3

24

为了扩展 Peter 所说的内容,您需要使用如下代码:

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

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

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

于 2009-12-13T15:07:43.263 回答
10

从苹果文档:

CGAffineTransformConcat 返回通过组合两个现有仿射变换构造的仿射变换矩阵。

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);

参数 t1 第一次仿射变换。

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

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

讨论 连接通过将两个仿射变换矩阵相乘来组合它们。您可以执行多个串联以创建包含多个变换的累积效果的单个仿射变换。

请注意,矩阵运算不是可交换的——连接矩阵的顺序很重要。也就是说,矩阵t1乘以矩阵t2的结果不一定等于矩阵t2乘以矩阵t1的结果。

于 2009-12-13T15:10:58.220 回答
2

一次只有其中一件作品。

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

如何保存转换然后应用另一个转换?

将它们连接在一起,并将生成的矩阵分配给属性。

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

于 2009-12-13T08:05:18.753 回答