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

标签 iphone objective-c ios cgaffinetransform


我坚持对象的变换和框架。当应用程序重新加载时,我只需要在新 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/

相关文章:

ios - 单击 UIButton for Webview 加载到 ipad 后应用程序崩溃

javascript - 为什么javascript :history. go(-1);不能在移动设备上工作?

iphone - 插入 View Controller 时应用程序崩溃

iphone - 删除按钮按下时的 MKMapView 覆盖

objective-c - 奇怪的 NSData 输出

ios - 移动平台? Cocos2d 和 Tiled

iPhone 应用程序开发 - 提取 XML 数据 - 时间和频率

objective-c - 如何连接到无线网络

ios - 如何像 iPad 时钟一样制作非常流畅的秒针动画(没有滴答声)

ios - 如何更新在 UITableViewCell 中添加的 View ?