ios - UIProgressView 动画只能正常工作一次

标签 ios swift uikit uiprogressview

我做了一些 HTTP 请求,在收到 HTTP 响应时设置类属性,并使用 willSet 更新进度条值。进度条动画仅运行一次。

var data: CompatibilityData? {
    didSet {
        self.progressView.setProgress(0.0, animated: false)

        UIView.animate(withDuration: 2.0) {
            self.progressView.setProgress(data.percentage! / 100, animated: true)
        }
    }
}

...

let task = URLSession.shared.dataTask(with: url) { data, response, error in
    ...

    if let data = data {
        ...

        DispatchQueue.main.async {
            if let r = response {
                self.data = r
            }
        }
     }
}

task.resume()

当我第二次收到 HTTP 响应时,预期行为会将进度重置为 0,并再次将其从 0 动画化为 data.percentage。目前,它从旧的 data.percentage 迁移到新的 data.percentage

最佳答案

它有助于理解动画在抽象层如何工作。仅仅因为进度值已更改,并不意味着代表其值的条的笔画路径已更新以反射(reflect)其更改为 0。

这意味着当 View 想要设置动画时,它将从“旧笔划路径”值(仍为先前的值)变为“新笔划路径”值(更新后的值)。

为了每次百分比变化时您想要从 0 开始显示动画,您必须更新 View 的布局,而不仅仅是基础值。

调用

self.progressView.layoutIfNeeded()

设置基础进度值后,将更新 ProgressView Bar 以反射(reflect)下一个绘图周期的正确值,并将在动画开始之前发生,以便动画将从 0 变为新值。

除非您想采用 @E.Coms 方法并等待 View 完成动画回到 0,然后再动画到新值。虽然这看起来很酷,但可能不是您想要的效果。

关于ios - UIProgressView 动画只能正常工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963425/

相关文章:

ios - 在 iOS 和 iPhone 上,如何绘制到位图并在 drawRect 中显示?

xamarin.ios - UImage.AsPNG() 线程安全吗?

ios - 定义模态视图尺寸 ?

ios - UIPageViewController 第二个 View 变为空白

ios - 在 iOS 上使用 OpenGL ES 2.0 进行实例化绘图

ios - 从 Storyboard自定义 UIViewController 初始化

ios - 动态结构变量名称

swift - 如何以高性能的方式使用可变数组作为字典值?

ios - 如何移动/重新排列触摸事件上的 View 位置?

iphone - 核心数据插入和获取对多关系实体