首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时使用CGAffineTransformMakeScale和Rotation?

如何同时使用CGAffineTransformMakeScale和Rotation?
EN

Stack Overflow用户
提问于 2009-12-13 15:12:48
回答 3查看 20.6K关注 0票数 14
代码语言:javascript
复制
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformMakeScale(.5,.5);

一次只能使用其中的一种。如何保存转换,然后应用另一个转换?干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-12-13 23:07:43

为了扩展Peter所说的内容,您可能希望使用如下代码:

代码语言:javascript
复制
CGAffineTransform newTransform;
newTransform = CGAffineTransformMakeRotation(1.57*2);
((UIImageView*)[dsry objectAtIndex:0]).transform = CGAffineTransformScale(newTransform,.5,.5);

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

您确实需要注意连接转换的顺序,以便获得正确的效果。

票数 24
EN

Stack Overflow用户

发布于 2009-12-13 23:10:58

来自Apple文档:

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

代码语言:javascript
复制
CGAffineTransform CGAffineTransformConcat (
   CGAffineTransform t1,
   CGAffineTransform t2
);

参数t1第一个仿射变换。

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

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

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

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

票数 10
EN

Stack Overflow用户

发布于 2009-12-13 16:05:19

一次只能运行其中的一种。

对,因为你把第一个换成了第二个。

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

Concatenate them together,并将结果矩阵赋给该属性。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1895818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档