Я разработчик iOS, в настоящее время разрабатываю приложение для iphone. У меня есть простой вопрос об обновлении содержимого ViewController, и я был бы очень признателен, если бы я мог получить отзыв от кого-то, кто знает об этой проблеме или предлагает решение.
Я пишу метод, который постоянно обновляет текст метки (и другие компоненты, такие как цвет фона UIImage «box1» и «box2»).
Проблема: обновление текста метки (наряду с другими изменениями) вступает в силу только в конце, когда код выполнен. Итак, я написал простой бесконечный цикл, который делает это следующим образом:
-(void) stateTest{
int i=0;
for(;;){
if (i==5) {
self.stateLabel.text=@"Opened"; //stateLabel previously declared
[self.box2 setBackgroundColor:[UIColor whiteColor]]; // box2 declared as UIImage
[self.box1 setBackgroundColor:[UIColor purpleColor]];
}
if (i==10){
self.stateLabel.text=@"Closed";
[self.box2 setBackgroundColor:[UIColor redColor]];
[self.box1 setBackgroundColor:[UIColor whiteColor]];
break;
}
i++;
}
}
и в методе viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
self.stateLabel.text=@“View did Load";
[self.box1 setBackgroundColor:[UIColorwhiteColor]];
[self.box2 setBackgroundColor:[UIColorwhiteColor]];
[self stateTest];
}
Я просматриваю код (точки останова), и вот проблема, с которой я столкнулся:
- когда i==5 текст метки НЕ обновляется (такой же, как цвет полей)
- когда i==10, текст метки НЕ обновляется
- Обновление (как текст метки, так и цвет поля) отображается после выполнения кода с помощью stateLabel : "Closed", поле 2: красный цвет фона
Я попытался вызвать несколько функций в конце метода stateTest (после i++), надеясь, что он «ОБНОВИТ» содержимое представления, метки и/или UIImage:
[self.stateLabel setNeedsLayout];
[self.stateLabel setNeedsDisplay];
[self.box1 setNeedsDisplay];
[self.box2 setNeedsDisplay];
[self.view setNeedsDisplay];
К сожалению, ни одно из этих испытаний не сработало. Я также поставил NSLog, который выводит текст метки, и он отлично работает, как я и хотел. Но проблема заключается в динамическом обновлении содержимого контроллера представления во время выполнения кода/метода.
Я был бы очень признателен за любую помощь, и я открыт для любого предложения
В идеале этот код используется параллельно с алгоритмом распознавания лиц, определяющим состояние рта. Существует метод processImage, который обрабатывает изображение каждый кадр. Я вызываю [self stateTest] каждый раз, когда обрабатывается изображение; если рот открыт → stateLabel.text=@”Open”… и т.д.
Заранее спасибо за ваш вклад Ура!