我正在处理一个项目,我已经放入了一个进度条,然后设置了一个按钮,以便在按下时启动进度条。问题是,当你按下开始按钮时,我希望在30分钟内取得进展,所以我需要帮助才能将其设置为30分钟。
以下是设置进度条和开始按钮的代码
m-file
- (IBAction)StartButton:(id)sender {
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(moreProgress)
userInfo:Nil repeats:YES];
[super viewDidLoad];
//progressbar start when button pressed
}
然后我得到了这个时间
//selector progress time
- (void) moreProgress {
myProgressView.progress += 0.001;
}
答案 0 :(得分:2)
我认为这只是一个数学问题。
首先,myProgressView.progress可以采用0.0到1.0之间的值。
当你每秒呼叫moreProgress时,你需要拨打1800次,持续30分钟。因此,myProgressView.progress应该增加1/1800秒。
将您的代码更改为:
- (void) moreProgress {
myProgressView.progress += 1.0/1800.0;
}
希望它对你有所帮助! :)
答案 1 :(得分:1)
1)保存当前时间(您可以通过示例将其保存到NSUserDefaults)。 你可以这样做:
NSUserDefaults *user1 = [NSUserDefaults standardUserDefaults];
NSDate *currentDate = [NSDate date];
[user1 setObject:[NSNumber numberWithDouble:[currentDate timeIntervalSince1970]] forKey:@"time"];
[user1 synchronize];
2)按照你的方式安排对你的功能的调用
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(moreProgress)
userInfo:Nil repeats:YES];
3)接下来在您的函数中,您需要使用以下内容更新进度视图状态:
//selector progress time
- (void) moreProgress {
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
NSDate *startTime = [NSDate dateWithTimeIntervalSince1970:[[user objectForKey:@"time"]doubleValue]];
NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
float progress = (float)elapsed time / 30.0 * 60.0;
myProgressView.progress = progress;
if ((float)elapsedTime / 30 * 60 >= 1)
{
// The timer is end, you should stop it and do what you need
}
}
注意:
是不安全的timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(moreProgress)
每秒都会启动。这不保证也不准确。