如何在不跟踪执行的每个操作的情况下执行多个 CGAffineTransform 操作(在动画块中)?
平移操作不采用 x,y 坐标,而是采用要移位的值。因此,除非您知道当前被翻译到的位置,例如“位置 2”,否则您如何知道要转换到“位置 3”的值?
例如:
UIView 的框架位于 (0, 0) - 位置 1。我将变换设置为平移到 (768, 0) 并旋转 -90 度 - 位置 2。一段时间过去了,现在我想移动到 (768, 1024)再旋转 -90 度 - 位置 3。
我怎么知道从位置 2 移动到位置 3 需要翻译什么?
在上下文中,我正在尝试实现如下所示的 iPad 视图:
- 一个占据整个屏幕的 UIView
- 占据上边缘并位于 UIView 顶部的 UIToolbar
- 当 iPad 旋转时,UIView 会留在设备上,但工具栏会旋转,使其始终位于屏幕的顶部边缘。
我正在使用 CGAffineTransform 平移和旋转来移动工具栏。效果很好,除非我多次旋转 iPad。第一次翻译/旋转将完美无缺。以下转换将关闭,因为我不知道要转换的正确值。
更新:
看起来如果我采用 UIView.transform 结构中的当前翻译 (tx, ty) 值并使用它们与新位置之间的差异,它就可以工作。但是,如果视图已旋转,则此方法不起作用。由于之前的旋转,tx 和 ty 值可以翻转。我不确定如何处理。
更新 2:
做一些研究,我发现我可以从 tx, ty 获得原始的、未旋转的点,方法是获取点的绝对值,如果 UIView 是垂直的,则可能交换 x 和 y。现在我被困在弄清楚如何以正确的顺序正确应用下一组转换。似乎无论我如何连接它们, UIView 最终都会出现在错误的位置。看起来这太复杂了,必须有一个更简单的方法。