翻转时如何恢复保存的变换

时间:2011-11-10 02:34:03

标签: iphone objective-c ios cgaffinetransform


我坚持变换和对象的框架。当应用程序重新加载时,我只需要在新视图上恢复帧和变换。你会认为你可以简单地设置框架并转换为保存的值,但你不能。这样做会产生不良后果。

http://iphonedevelopment.blogspot.com/2008/10/demystifying-cgaffinetransform.html

说:“当你应用成功转换时,顺序很重要。旋转然后翻译会给你一个不同的结果,然后翻译然后再转动。如果你不小心,这可能会咬你。”

当我保存 FLIPPED&的转换时,我只有转换问题。 ROTATED 即可。我的保存值与应用于恢复视图的值相同。

实际结果:

做的时候:

myNewView.frame = savedFrame

myNewView.transform = savedTransform

我的观点会向下移动到右边(不合适)。

有人可以帮助我按正确的操作顺序恢复变换吗?

同样,我已经确认我保存和加载的转换数据是完美的,所以我知道它的操作顺序问题,我只是不够聪明,无法弄清楚下一步该做什么:P

1 个答案:

答案 0 :(得分:4)

要撤消已保存的变换,您需要进行逆变换。请参阅您引用的页面中的“退回”标题。尝试:

myNewView.transform = CGAffineTransformInvert(savedTransform);

任意矩阵并不总是可逆的,但通常会对仿射变换保持安全。 Here是一些需要注意的特殊情况。

通常,矩阵求逆可能会导致舍入误差,因此如果需要重复执行此操作,则可能需要使用不同的方法。

编辑:

重新阅读这个问题之后,我怀疑转型的起源可能已经发生了变化。当涉及旋转时,围绕不同原点旋转将显示为意外翻译。从docs开始,原点可以是视图的中心,也可以是图层的锚点。我建议您在保存转换时检查这些属性,并在恢复时查看它们是否有所不同。