嗨我想在我的iPhone应用程序中根据时间使用进度条 如果一个人开始旅程从上午10:00开始并在11:00完成,那么每5分钟我将更新进度与当前时间相比, 怎么可能
答案 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分钟后关闭并打开。