暂停和重置中期动画后,进度条无法正常动画

时间:2018-03-21 19:19:59

标签: ios swift

我有一个进度条,持续动画从0到1.0。如果用户暂停应用,我将其设置为0。问题是如果他们快速恢复,进度条不会像它应该那样转到1.0。

我知道(很确定)这是动画加倍的问题。

  • 我的进度条在15秒内从0到1
  • 我暂停
  • 我将进度条设置为0并删除所有动画
  • 我马上恢复
  • 进度不再填补后续动画的标准

    如果我等待> 15秒恢复没有问题。

以下是动画我的进度条的代码。

    self.progressBar.layer.removeAllAnimations()
    self.progressBar.progress = 0.0
    self.progressBar.layoutIfNeeded()
    self.progressBar.layer.removeAllAnimations()

    self.progressBar.progress = 1.0
    UIView.animate(withDuration: time) {
        self.progressBar.layoutIfNeeded()

    }

我从0到1.0继续进行,我遇到的问题是完成块没有及时到0。 (这就是它在动画之前重置的原因)

如果用户暂停:

    self.progressBar.progress = 0.0
    self.progressBar.layoutIfNeeded()
    progressBar.layer.removeAllAnimations()

然后当我去恢复时,进度条没有达到1.0进度。每次运行func时它会持续增加量,直到大约5个循环后。

在研究这个问题时,我遇到了一篇关于使用CATransaction在完成时将进度条重置为0的SO帖子,但由于我称之为速度,导致第二,第四等循环的问题没有动画。

当您尝试同时将进度设置为0和1时,会出现此问题。但是,据我所知,我不是在这里做的。除了暂停/恢复方案外,它的工作效率为100%。

我99%肯定它的进度动画加倍但我不确定当我在动画制作之前移除动画时这是怎么可能的。

注意:使用progressBar.setProgress不会改变任何内容。

提前致谢

1 个答案:

答案 0 :(得分:0)

要从progressView中删除所有动画,可以使用以下方法:

for (CALayer *layer in self.progressView.layer.sublayers) {
    [layer removeAllAnimations];
}