2014-11-03 3 views
0

Я работаю над проектом, я установил индикатор выполнения, а затем установил кнопку, чтобы запустить панель прогресса при нажатии. Дело в том, что я хочу добиться прогресса за 30 минут, когда вы нажали кнопку запуска, поэтому мне нужна помощь, чтобы установить его на 30 минут., работающий с UIProgressView, чтобы установить индикатор выполнения до 30 минут

Вот мой код, чтобы настроить ProgressBar и startbutton

м-файл

- (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 минут, чтобы стать полным, не так ли? –

+0

yes :) thats what i want – Andy

ответ

1

Я думаю, это только математическая проблема.

Во-первых, myProgressView.progress может принимать значения от 0.0 до 1.0.

Как вы называете moreProgress каждую секунду, вам нужно будет называть его 1800 раз в течение 30 минут. Таким образом, myProgressView.progress должен увеличиться на 1/1800 за секунду.

Изменить код:

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

Надеется, что это помогает! :)

+0

Помогло ли вам это? Если да, не могли бы вы принять его как правильный ответ? Благодаря! :) @andy –

+0

есть. спасибо! :) – Andy

+0

если у меня есть кнопка остановки, как я могу остановить таймер, с invalidate-method? – Andy

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) 

будет срабатывать каждую секунду. Это не гарантировано и неточно.

Смежные вопросы