我坚持对象的变换和框架。当应用程序重新加载时,我只需要在新 View 上恢复框架和变换。你会认为你可以简单地设置框架并转换为保存的值,但你不能。这样做会产生不良结果。
http://iphonedevelopment.blogspot.com/2008/10/demystifying-cgaffinetransform.html
说:“当你应用成功的转换时,顺序很重要。旋转然后平移会给你一个不同的结果,然后平移然后旋转。如果你不小心,这可能会咬你。”
只有当我保存已FLIPPED & ROTATED 的转换时,我才会遇到转换问题。我的保存值与应用于恢复 View 的值相同。
实际结果:
做的时候:
myNewView.frame = savedFrame
myNewView.transform = savedTransform
我的 View 将向下和向右移动(错位)。
谁能帮我按照正确的操作顺序恢复我的转换?
再次,我已经确认我保存和加载的转换数据是完美的,所以我知道这是一个操作顺序问题,我只是不够聪明,不知道下一步该做什么:P
最佳答案
要撤消保存的转换,您需要进行逆变换。请参阅您引用的页面中的标题 Stepping Back。尝试:
myNewView.transform = CGAffineTransformInvert(savedTransform);
任意矩阵并不总是可逆的,但仿射变换通常是安全的。 Here是一些需要注意的特殊情况。
一般来说,矩阵求逆可能会导致舍入误差,所以如果你需要反复这样做,你可能需要使用不同的方法。
编辑:
重新阅读问题后,我怀疑转换的起源可能已经改变。当涉及到旋转时,围绕不同原点旋转将表现为意想不到的平移。来自docs ,原点是 View 的中心,或者图层的 anchor 。我建议在保存转换时检查这些属性,并在恢复时查看它们是否不同。
关于iphone - 翻转时如何恢复保存的变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074334/