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

问题描述 投票:-3回答:1

我有一个动画问题,因为我想要有不同端点的相同动画,在完成上一个动画时调用,并且在没有轻微停止的情况下顺利执行。

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

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个动画。

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

我可以帮助您顺利实现动态动画吗?

ios swift animation
1个回答
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)
        }
    })
}

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

© www.soinside.com 2019 - 2024. All rights reserved.