我对动画有问题,因为我希望同样的动画有不同的结束点,在完成上一个动画时调用,并且可以顺利执行而不会轻微停止。
让我详细说明示例代码和评论。
Func animate()
{
Start animation(completionHandler: {
If condition is true
Repeat the animation and check after it finishes
}
}
但是这个代码的问题在于,在完成第一个动画和开始另一个动画之间,会有一个分裂的第二个停止,这不是平滑运动。例如,我有一个关于零点的视图,用动画移动到A点(x:100,y:100),然后它会在到达A点后接收B点(x:500,y:900)将停止一瞬间然后移动到B点。因为这些点是动态的,我不知道是否有新的点,如果我这样做,我不会事先知道坐标,所以我需要保持逻辑动态和保持动画在点之间平滑。
我尝试了很多逻辑,结果不是我想要的。我面对平滑排队动画的问题是:
我在下面尝试了UIView.animate:
一个。我尝试设置一个动画持续时间让我们说2秒,然后在它完成之后,它会在完成hander / closure / block中再次调用动画,但是它会导致两个动画之间的第二次停止。
湾我试图开始2个动画,第二个是延迟的第一个动画的确切持续时间,但结果也在2个动画之间短暂停止。
2.我尝试了带关键帧的动画,但由于我事先并不知道所有动画,所以这不起作用。
您可以帮我解决一下平滑动态动画的方法吗?
答案 0 :(得分:1)
您自己的伪代码会回答您的问题。只要测试你的条件,如果你需要再次制作动画,请计算新的起点和终点并再次制作动画:
func animate(start:Int, end:Int) {
UIView.animate(withDuration: 5, animations: {
// animate here based on new start and end
}, completion: { _ in
var weShouldDoItAgain = false
// figure out if we should do it again
// if so, change weShouldDoItAgain to true
if weShouldDoItAgain {
var start = start // and now change it to new value
var end = end // and now change it to new value
self.animate(start:start, end:end)
}
})
}
只需更改所有值和类型以适合您的使用案例。