使用UIProgressView将进度条设置为30分钟

时间:2014-11-03 14:46:02

标签: ios nstimer uiprogressview

我正在处理一个项目,我已经放入了一个进度条,然后设置了一个按钮,以便在按下时启动进度条。问题是,当你按下开始按钮时,我希望在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;
}

2 个答案:

答案 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)

每秒都会启动。这不保证也不准确。