0

嗨,我想根据时间在我的 iPhone 应用程序中使用进度条,例如如果一个人从上午 10:00 开始旅程并在上午 11:00 结束,那么每 5 分钟我将更新与当前时间相比的进度,怎么样可能的

4

2 回答 2

2

您可以使用一个简单NSTimer的方法来实现这一点:

viewDidLoad当然,这些变量需要在你的头文件中声明。

UIProgressView *myProgressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
float someFloat = 0;

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(methodToUpdateProgress) userInfo:nil repeats:YES];

然后这将更新进度视图(假设最小值/最大值为 0-100)

- (void)methodToUpdateProgress
{
    if(someFloat == 100){
         [myTimer invalidate];
    }else{
         someFloat = someFloat + 12;
         [myProgressView setProgress:someFloat animated:YES];
    }
}

此外,如果调用它的时间实际上是一个问题,这个例子应该对你有很大帮助。引用自: 我如何使用 NSTimer?

NSDate *d = [NSDate dateWithTimeIntervalSinceNow: 60.0];
NSTimer *t = [[NSTimer alloc] initWithFireDate: d
                              interval: 1
                              target: self
                              selector:@selector(onTick:)
                              userInfo:nil repeats:YES];

NSRunLoop *runner = [NSRunLoop currentRunLoop];
[runner addTimer:t forMode: NSDefaultRunLoopMode];
[t release];

注意:这是一个非常粗略的示例,但它应该能够理解重点。希望这可以帮助!

于 2012-08-23T08:00:12.640 回答
0

iVar:

NSDate *_startDate = ....
NSDate *_finishDate = ....
UIProgressBarView *_progressBar = ....

触发方法:

- (void)start
{
   [self updateProgressBar];
   NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:updateInterval 
                                                     target:self 
                                                     selector:@selector(updateProgressBar) 
                                                     userInfo:nil 
                                                     repeats:YES];
}

更新进度条视图

- (void)updateProgressBar
{
     NSTimeInterval diff = [_finishDate timeintervalSince:_startDate];
     NSTimeInterval pastTime = [_finishDate timeIntervallSinceNow];
     [_progressBar setProgress:pastTime/diff animated:YES];

}

不要忘记在计时器完成时和在 dealloc 方法中使计时器无效。

如果您将完成日期和开始日期保存在代码中的其他位置。然后您可以重新创建具有相同状态的视图,即使它已被释放。这意味着用户不需要打开该视图 1 小时。例如。他/她在 30 分钟后关闭和打开。

于 2012-08-23T08:08:01.983 回答