Аз съм разработчик на 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", Box 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”…и т.н
Благодаря ви предварително за вашия принос. Наздраве!