Этот вопрос задан раньше, но ответы не работают. Я знаю, что (исправьте меня, если я ошибаюсь) основной поток обновляет пользовательский интерфейс, поэтому нам нужно вызвать основной поток в цикле. Я пытаюсь это и прогресс бар только обновления в конце цикла (так идет от 0% до 100%)UIProgressBar не обновляется в цикле
Вот мой код
.h
@interface ViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UIProgressView *progressBar;
float progressBarPercentage;
}
-(IBAction)button:(id)sender;
@end
.m
-(IBAction)button:(id)sender{
for (int z=0; z < 9; z++){
//do stuff
float progressBarPercentage = (1.0/9.0 * (z + 1));
[self performSelectorOnMainThread:@selector(makeMyProgressBarMove) withObject:nil waitUntilDone:NO];
}
}
-(void)makeMyProgressBarMove{
[progressBar setProgress:progressBarPercentage animated:YES];
}
при работе в режиме отладки, я заметил, когда он попадает в линию [self performSelectorOnMainThread:@selector(makeMyProgressBarMove) withObject:nil waitUntilDone:NO];
он просто перезапускает цикл, не вдаваясь в 1makeMyProgressBarMove: `
Кроме того, часть //do stuff
не является коротким, на самом деле требуется 5 секунд для запуска кода при нажатии кнопки, поэтому не так быстро обновляется, что я не вижу его.
Спасибо, и дайте мне знать, если требуется дополнительная информация, я еще новичок
Вы должны «делать вещи» в другом потоке также, в противном случае он будет по-прежнему блокировать ваш основной поток. Обратите внимание, что 'performSelectorOnMainThread' не имеет смысла, если вы уже находитесь в основном потоке. – Taum
Я нахожусь в ViewController.m, это главный поток? – uti0mnia
Является ли progressBarPercentage объявленным внутри IBAction или вне его? – Piyuesh