如果动画尚未完成,UIProgressView 不会重新启动
UIProgressView doesn't restart if the animation hasn't finished
我正在做一个锻炼应用程序,我有一个 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()
知道发生了什么事吗?我已经被这个错误困扰了一个星期了。
谢谢!
你需要
- 删除当前动画
- 将进度重置为 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)
}
我正在做一个锻炼应用程序,我有一个 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()
知道发生了什么事吗?我已经被这个错误困扰了一个星期了。
谢谢!
你需要
- 删除当前动画
- 将进度重置为 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)
}