如何在不停止的情况下动态平滑地动画视图的运动 - iOS Swift

时间:2018-04-15 10:40:00

标签: ios swift animation

我对动画有问题,因为我希望同样的动画有不同的结束点,在完成上一个动画时调用,并且可以顺利执行而不会轻微停止。

让我详细说明示例代码和评论。

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点。因为这些点是动态的,我不知道是否有新的点,如果我这样做,我不会事先知道坐标,所以我需要保持逻辑动态和保持动画在点之间平滑。

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

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

    一个。我尝试设置一个动画持续时间让我们说2秒,然后在它完成之后,它会在完成hander / closure / block中再次调用动画,但是它会导致两个动画之间的第二次停止。

    湾我试图开始2个动画,第二个是延迟的第一个动画的确切持续时间,但结果也在2个动画之间短暂停止。

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

    您可以帮我解决一下平滑动态动画的方法吗?

1 个答案:

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

只需更改所有值和类型以适合您的使用案例。