ios - 如果动画未完成,UIProgressView 不会重新启动
问题描述
我正在做一个锻炼应用程序,我有一个在锻炼过程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)
}
推荐阅读
- c++ - 强制 OpenMP 不在每个线程中缓存大对象
- javascript - 如何从 DOM 中删除所有 videoJS 控件
- python - 是否可以使用 wx.toolbar 在 wxPython 中单击后执行事件?
- ios - tableView 中几个 NSTimer 对象的问题
- cmake - CMake:将静态库 (.a) 链接到小型 c++ 脚本
- python - 将云存储连接到云功能
- asp.net-core - Ocelot API Gateway 可选参数
- java - java.lang.NullPointerException: null Spring API 休息
- python - 引用数组的多个值时使用 Python 列表理解排除重复项
- android - 例外 - 即使用户尚未通过身份验证或已注销,仍请求数据库访问