如何一次使用CGAffineTransformMakeScale和Rotation?

qua*_*ato 14 iphone core-graphics cgaffinetransform

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

其中只有一个是一次一个.如何保存转换然后应用另一个?干杯

Bra*_*son 24

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

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

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

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


jes*_*rry 9

来自Apple文档:

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

CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);
Run Code Online (Sandbox Code Playgroud)

参数t1第一个仿射变换.

t2第二个仿射变换.该仿射变换与第一仿射变换连接.

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

讨论级联将两个仿射变换矩阵相乘,将它们相乘.您可以执行多个连接以创建包含多个转换的累积效果的单个仿射变换.

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