如何在不停止的情况下动态流畅地对视图的移动进行动画处理 - iOS Swift



我对动画有问题,因为我希望在完成上一个动画时调用具有不同端点的相同动画,并且平稳执行而不会稍微停止。

让我用示例代码和注释进行详细说明。

Func animate()
{
Start animation(completionHandler: {
If condition is true 
Repeat the animation and check after it finishes
}
}

但是这段代码的问题在于,在完成第一个动画和开始另一个动画之间,会有一个不平滑移动的瞬间停止。例如,我有一个零点视图,用动画移动到点 A (x:100,y:100),然后它将接收点 B(x:500,y:900),到达点 A 后它会停止一瞬间然后移动到 B 点。由于这些点是动态的,我无法知道是否有新点,如果我知道,我事先也不知道坐标,所以我需要保持逻辑动态并保持点之间的动画平滑。

我尝试了很多逻辑,结果不是我想要的。 我在平滑排队动画时遇到的问题是:

  1. 我在下面尝试了UIView.animate:

    一个。我尝试设置动画持续时间,比如说 2 秒,然后在完成后,它会在完成处理程序/闭包/块中再次调用动画,但这会导致两个动画之间的停止时间不到秒。

    二.我尝试启动 2 个动画,第二个动画延迟了第一个动画的确切持续时间,但结果在 2 个动画之间也短暂停止。

2.我尝试了使用关键帧的动画,但由于我事先不知道所有动画,因此这不起作用。

你能帮我一个流畅的动态动画的方法吗?

你自己的伪代码回答了你的问题。只需测试您的条件,如果您需要再次制作动画,请计算出新的起点和终点并再次制作动画:

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)
}
})
}

只需更改所有值和类型即可适合您的用例。

最新更新