ios - 重置 UIProgressView 并立即开始动画

标签 ios objective-c uiprogressview

假设我有一个 UIProgressView 显示某些任务的进度(在本例中由计时器以设定的时间间隔触发)。

在正常情况下,这工作正常。它从 0 开始,所以在我最初调用动画进度 View 时,一切都按预期进行。

但是,当我需要重置进度时,事情就开始崩溃了。

假设我有以下事件序列:

  1. 用户启动了刷新,因此进度 View 开始使用计时器进行动画处理。
  2. 几秒钟后,进度 View 已达到 70%。
  3. 在它可以进一步前进之前,用户已经启动了另一次刷新。

我希望进度条重置为 0 unanimated,然后立即触发动画的第一步。当我尝试这样做时,就好像第一次调用(重置为 0)被完全忽略了,取而代之的是我得到了一个从 70% 到 10% 的动画。 (即进度条向后移动!)

我不希望进度在动画期间向后移动。

这是我的代码:

- (void)beginAnimation {
    // omitted: clear the timer
    [self.progressView setProgress:0 animated:NO];
    [self.progressView setProgress:0.1 animated:YES];
    // omitted: fire off a timer to trigger every few seconds and advance the progress
}

最佳答案

本质上,我们想在 next run loop 上安排动画.

在这种情况下,我能够通过使用 dispatch_async() 来做到这一点:

- (void)beginAnimation {
    // omitted: clear the timer
    [self.progressView setProgress:0 animated:NO];
    dispatch_async(dispatch_get_main_queue(), ^{
        // Animate on the next run loop so the animation starts from 0.
        [self.progressView setProgress:0.1 animated:YES];
    });
    // omitted: fire off a timer to trigger every few seconds and advance the progress
}

关于ios - 重置 UIProgressView 并立即开始动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213703/

相关文章:

iphone - 在 UITableView 中显示来自 Core Data 的下载队列

ios - 带有进度条的 UIWebView

objective-c - 我怎样才能使这段代码更有效率( Objective-C )?

objective-c - 具有 iPad 视网膜显示屏的模拟器

iphone - 如何将文件添加到 xcode iphone 项目中的 .plist?

objective-c - 单击按钮后重新加载TableView数据

iphone - 如何增加UIProgressView的高度

ios - UITableViewCell 作为进度指示器

ios - 从 iTunes Connect 中删除新的应用程序版本

ios - 如何在 Swift 中暂时停止使用某个方法?