我有一个关键帧动画,在一个View Controller中效果很好。然后,我将该代码复制到另一个类似的VC。区别在于,这次被动画化以在屏幕上移动的视图更深一层,嵌套在另一个UIView中。这似乎导致坐标问题。

我得到这样的目的地x点:

let last_Pos = destinationImg.superview?.convertPoint(destinationImg.frame.origin, toView: nil)


然后在关键帧中,将x设置如下:

self.animatedView.frame.origin.x = last_Pos!.x


我在原始ViewController和新版本中都打印了“ last_Pos”。 x的取值为465,所以这不是问题。我很确定我的问题是,在第二个VC中,465被应用到了嵌套的额外层/ UIView中。我研究了this,但是并没有用Swift编写太多东西,但看起来像Objective-C有办法做到这一点。

我的问题是,如何在这两个视图的同一层上获取x值,以便可以使一个视图动画化?

最佳答案

如上所述,我试图获取“绝对”的x和y位置以对不同层次结构中的两个视图设置动画。如果您不知道,则在检查frame.origin.x或frame.origin.y时,将获得引用其父视图的上下文x和y位置。我找不到有效的答案,也没有人对此线程做出回应。

所以...我的答案更像是一个修补程序修复程序,似乎在大多数情况下都可以正常工作:

我只是在界面生成器中添加了另一个视图。


我把它叫做“量尺”
并使其不可见
并确保它位于我所有的按钮下面,以免阻塞按钮的点击等。


对于自动布局约束,我将一端连接到动画应源自的视图,而另一端连接到要让动画结束的视图。神奇之处在于它会随着方向变化,iPhone,iPad布局等改变宽度和高度。

然后,对于我的动画,我的所有代码要做的就是检查“量尺”的宽度和高度,并将这些值用于x和y的变化。

希望这可以帮助。

关于ios - 在不同的层次结构中将一个 View 动画化为另一个 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38672275/

10-14 22:42
查看更多