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