【问题标题】:UIProgressView doesn't restart if the animation hasn't finished如果动画未完成,UIProgressView 不会重新启动
【发布时间】:2021-07-26 17:00:53
【问题描述】:

我正在做一个锻炼应用程序,我有一个UIProgressView,在锻炼过程中会充满动画。在它结束时,它会重新启动到 0 并再次填充下一次锻炼。这很好用,除非用户在动画未完成的情况下按下“下一步”。

在这种情况下,动画按预期变为 0,但直到 4-5 秒后才重新开始。

这就是我的代码的样子:

self.exerciceView.progressView.setProgress(0.0, animated: false)
self.view.layoutIfNeeded()
        
startTimer()
        
UIView.animate(withDuration: TimeInterval(seconds)) {
    self.exerciceView.progressView.setProgress(1.0, animated: true)
}
self.view.layoutIfNeeded()

知道发生了什么吗?我已经被这个错误困扰了一个星期了。

谢谢!

【问题讨论】:

标签: ios swift uikit calayer uiprogressview


【解决方案1】:

你需要

  • 移除当前动画
  • 将进度重置为 0.0
  • 强制progressView进行布局:

应该这样做:

    // remove animations from all layers of progressView
    if let layers = exerciceView.progressView.layer.sublayers {
        layers.forEach { layer in
            layer.removeAllAnimations()
        }
    }
    // reset to 0.0
    self.exerciceView.progressView.setProgress(0.0, animated: false)
    // force layout
    self.exerciceView.progressView.setNeedsLayout()
    self.exerciceView.progressView.layoutIfNeeded()

    // animate progressView
    UIView.animate(withDuration: TimeInterval(seconds)) {
        self.exerciceView.progressView.setProgress(1.0, animated: true)
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2013-05-08
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多