Swift:动画UIView向源头移动而不是远离源

时间:2018-05-26 16:59:02

标签: ios swift animation

我认真地环顾四周,但找不到能回答我问题的东西,所以如果你找到了正确的解决方案,请告诉我。

所以:我在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位置有限制,但没有任何限制。

2 个答案:

答案 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)

这实际上会为图层设置动画,而不是视图的实际帧。