2014-11-03 76 views
0

我正在处理项目时,我已经放入了一个进度条,然后设置了一个按钮以在按下时启动进度条。事情是,我想在按下startbutton的30分钟内取得进展,所以我需要帮助将其设置为30分钟。使用UIProgressView将进度条设置为30分钟

这里是我的代码来设置进度,并startbutton

M文件

- (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

我不知道我理解你的问题。你的意思是你想让progressView花费30分钟才能变满,对吗? – 2014-11-03 14:58:13

+0

是:)多数民众赞成在我想要的 – Andy 2014-11-03 15:06:18

回答

1

我想这只是一个数学问题。

首先,myProgressView.progress可以使用从0.0到1.0的值。

当你每秒打电话给moreProgress时,你需要在30分钟内打电话1800次。因此,myProgressView.progress应该每秒增加1/1800。

你的代码更改为:

- (void) moreProgress { 
    myProgressView.progress += 1.0/1800.0; 
} 

希望它可以帮助你! :)

+0

它帮助你吗?如果是这样,你能否接受它作为正确答案?谢谢! :) @andy – 2014-11-03 19:28:21

+0

是的。谢谢!:) – Andy 2014-11-04 06:51:09

+0

如果我有一个停止按钮,我如何停止计时器,与invalidate方法? – Andy 2014-11-06 08:12:28

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) 

将每秒启动。它不能保证也不准确。