我认真地环顾四周,但找不到能回答我问题的东西,所以如果你找到了正确的解决方案,请告诉我。
所以:我在Xcode中写了一个小应用程序,其中两个标签应该从当前位置移动到350点以上的另一个位置。我像这样给他们制作动画:
UIView.animate(withDuration: 2.0 , animations: {
self.label1.center.y += CGFloat(-350)
self.label2.center.y += CGFloat(-350)
})
实际发生的事情是,一旦这条线被击中,标签就会下降350点,然后将350点移动到它们的来源。当我将CGFloat
值更改为+350时,标签跳起350点,然后再次向下移回源。所以看起来,Xcode不是从源头开始动画,而是试图让动画转到源头。老实说,我不知道为什么,因为关于动画的所有文档都提示不然。
BTW我也看了一下,我是否对标签的y位置有限制,但没有任何限制。
答案 0 :(得分:1)
首先,试试:
self.label1.center.y += CGFloat(-350)
self.label2.center.y += CGFloat(-350)
然后:
UIView.animate(withDuration: 2.0 , animations: {
layoutIfNeeded()
}
注意:如果您对标签使用约束,则应更改其约束而不是向其添加CGFloat
来更改标签的位置。然后尝试:
UIView.animate(withDuration: 2.0 , animations: {
layoutIfNeeded()
}
答案 1 :(得分:0)
您可以在动画块中尝试以下代码,而不是试图移动视图中心,这是一种不好的做法。
self.label2.transform = CGAffineTransform(scaleX: 0, y: 350)
这实际上会为图层设置动画,而不是视图的实际帧。