【问题标题】:How can I animate the movement of a view dynamically and smoothly without stopping - iOS Swift如何在不停止的情况下动态流畅地动画视图的移动 - iOS Swift
【发布时间】:2018-04-15 10:39:59
【问题描述】:

我对动画有问题,因为我想要具有不同端点的相同动画,在完成前一个动画时被调用并顺利执行而不会稍有停止。

让我用示例代码和 cmets 详细说明。

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 秒,然后在完成后,它会在完成处理程序/关闭/块中再次调用动画,但它会导致两个动画之间的停止时间少于一秒。

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

2.我尝试了使用关键帧的动画,但是由于我事先不知道所有动画,所以这行不通。

您能否帮助我实现流畅的动态动画?

【问题讨论】:

  • 您能发布您目前为动画制作的代码吗?
  • Objective-C 的这个答案,但你可以用 Swift 做类似的事情:stackoverflow.com/questions/14730460/…
  • @Jake 我可以,但主要是在 for 循环中调用 UIview.animate 是不够的
  • @Raviprakash 问题是我不知道我需要动画多少次,这取决于条件所以它不是固定的次数
  • 谁能至少告诉我投反对票的原因是什么?请赐教

标签: ios swift animation


【解决方案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)
        }
    })
}

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

【讨论】:

  • 我实现了类似的东西并且工作正常,虽然我希望有一个更干净和依赖的解决方案,而闭包并没有完全帮助。
  • 我不知道 clean 和dependent 和closures 在这里是什么意思。
  • 我的意思是,我不是在动画块之后签入,而是想要一个更通用的方法,但似乎这是唯一的方法。
  • 我现在有个问题,完成处理程序是在动画的同时被调用的,而不是在动画完成之后,为什么?
  • 我怎么知道?你从来没有展示过任何真实的代码。我不知道你在做什么。请不要在 cmets 中偷窃。如果您有新问题,请点击并提问。
猜你喜欢
  • 2011-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2021-05-17
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多