gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:53 25 4
gpt4 key购买 nike


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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com