重置UIProgressView并立即开始动画

时间:2014-06-13 20:55:34

标签: ios objective-c uiprogressview

想象一下,我有一个显示某个任务进度的UIProgressView(在这种情况下,由设定间隔的计时器触发)。

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

但是,当我需要重置进度时,事情就会开始破坏。

想象一下,我有以下一系列事件:

  1. 用户启动了刷新,因此进度视图开始使用计时器进行动画制作。
  2. 几秒钟后,进度视图已达到70%。
  3. 在进一步推进之前,用户已启动另一次刷新。
  4. 我希望将进度条重置为0非动画,然后立即触发动画的第一步。当我尝试这样做时,就好像第一次调用(重置为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
    }
    

1 个答案:

答案 0 :(得分:0)

基本上,我们希望在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
}