UIProgressView не отображает прогресс точно - PullRequest
0 голосов
/ 07 мая 2011

Я использую UIProgresView для отображения загрузки и в метке процент загрузки контента. Функция выполняется каждый раз.Когда я отображаю значение прогресса, оно отображается правильно в консоли.Но он не отображается на экране, он отображается только при 0% и 100%.Я тоже использую ASIHTTP framework.

Пожалуйста, помогите в этом.

КОД от комментария:

for (float i=0; i< [topicNew count]; i++) 
{ 
   NSDictionary *new= [topicNew objectAtIndex:i]; 
   NSString *imageName = [[[NSString alloc] initWithFormat:@"%@.%@.%@.png", appDelegate.subject,topicNamed,[new objectForKey:kWordTitleKey]] autorelease]; 
   NSString *imagePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:imageName]; 
   NSData *imageData = [self ParsingImagePath:[new objectForKey:kWordImagePathKey]]; 
   [progressView setProgress:i/[topicNew count]]; 
   [lblpercent setText:[[NSString stringWithFormat:@"%.0f",i/[topicNew count]] stringByAppendingString:@"%"]];

... Больше кода здесь ...

1 Ответ

0 голосов
/ 01 апреля 2013

Похоже, вы блокируете поток своей основной темы.Это означает, что вы обновляете progressView, но основная нить никогда не выходит из цикла for, чтобы отобразить обновленное изменение, пока цикл for не будет завершен, что к тому времени похоже, что ваш прогресс установлен на 100%.либо использовать таймер типа (NSTimer), либо какой-нибудь фоновый поток, который обрабатывает ваши файлы изображений.Затем вам нужно вызвать ваш экземпляр UIProgressView из фонового потока, когда вы хотите обновить свой прогресс (например, конец цикла for)

float p = i/[topicNew count];
[progressView performSelectorOnMainThread:@selector(setProgress:) 
   withObject:[NSNumber numberWithFloat:p]
   waitUntilDone:NO];

и передать ваш обновленный прогресс в progressView.Убедитесь, что вы не вызываете progressView из фонового потока напрямую, поскольку UIKit не является потокобезопасным.Вызывайте его только из основного потока или с помощью метода performSelectorOnMainThread:withObject:waitUntilDOne:.

Надеемся, что это сразу даст вам право

...