在objective-c中使用基于Time的ProgressBar

时间:2012-08-23 07:55:32

标签: objective-c ios progress-bar nstimer

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

2 个答案:

答案 0 :(得分: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];
    }
}

此外,如果调用它的时间实际上是一个问题,这个例子可以帮助你很多。 引自: How do I use 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];

注意:这是一个相当粗略的例子,但它应该得到重点。希望这有帮助!

答案 1 :(得分:0)

IVARS:

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

triggerMethod:

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

更新progressbarview

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

}

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

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