0

如何更改 transformIdentity。我们如何将变换设置为“零”,或者将视图的 transformIdentity 更改为所述视图的变换的当前状态。

换句话说,我想缩放一个视图,然后将当前状态(比如 2.5 的比例)设置为视图的默认比例(1 的比例)。

示例代码:

   view.transform = CGAffineTransformMakeScale(1, 2.5);

我想做的伪代码:

   view.transform = setTransformIdentityTo:view.currentState;

如果我正确理解 transformIdentity 是比例为 1 或旋转为零的状态,则默认为“零”变换。

注意:我想这样做的原因是,我可以只在视图的一个轴上设置负比例变换,并始终获得相对于调用翻转之前视图的最后状态的翻转视图。

4

4 回答 4

5

CGAffineTransformIdentity确实将视图或图层重置为其原始的未转换状态,因此无法重新定义。
但是,如果您想要您的“个人”重置转换,例如使用不同的比例,为什么不简单地定义它,例如使用CGAffineTransform myCGAffineTransformIdentity = CGAffineTransform CGAffineTransformMakeScale (sx,sy);,并将其应用于您的视图?

于 2013-04-21T08:09:28.323 回答
2
selectedSticker.transform = CGAffineTransformIdentity;
于 2013-04-21T07:38:43.263 回答
0

如果你想让你的视图仍然被变换,即使它自己的变换是恒等变换,你可以做的就是把它放在另一个被变换的视图中。为外部视图提供您想要的默认转换;内部视图是您进行实际工作的视图。

因此,假设您希望您的“身份”水平缩放 2 倍。您将外部视图的变换设置为该变换,然后保持不变,而内部视图保持不变。当您想添加进一步的转换时,将其添加到内部视图中,并且当您想将其重置为默认值时,将内部视图的转换设置回(真实)身份。您的内部视图仍将通过外部视图的变换缩放(或其他)。


注意:我简单地尝试了一下,发现(a)自动布局在它上面,(b)缩放是从锚点向外的,这意味着我的外部视图的水平比例推动了我的内部视图有点越界,并且(c) 改变外部视图的锚点以CGPointZero产生更多的欢闹。

因此,虽然这在理论上是一个不错、简单、优雅的解决方案,但它实际上可能比它的价值更大,在这种情况下,我推荐Reinhard Männer 建议的方法。

于 2013-04-21T21:04:22.200 回答
0

似乎这适用于我想做的事情:

CGAffineTransform trans = CGAffineTransformMakeScale(1, 2.5);

view.transform = CGAffineTransformConcat(selectedSticker.transform, trans);
于 2013-04-21T08:08:47.737 回答