想象一下,我有一个显示某个任务进度的UIProgressView(在这种情况下,由设定间隔的计时器触发)。
在正常情况下,这样可以正常工作。它从0开始,所以在我最初调用进度视图动画时,一切都按预期工作。
但是,当我需要重置进度时,事情就会开始破坏。
想象一下,我有以下一系列事件:
我希望将进度条重置为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
}
答案 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
}