#label #uilabel #uiprogressview
#ярлык #uilabel #uiprogressview
Вопрос:
Я использую UIProgresView для отображения загрузки и в ярлыке процент загрузок контента.Функция выполняется каждый раз. Когда я отображаю значение прогресса, оно отображается правильно в консоли. Но он не отображается на экране, он отображается только на 0% и 100%. Я тоже использую платформу ASIHTTP.
Пожалуйста, помогите в этом.
КОД из комментария:
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 до 100 вместо 0-1, и, возможно, приведение тоже является проблемой.
2. Нет, я использую от 0 до 1.
3. Никто не знает об этом!
4. Нет кода, нет помощи, извините, все остальное было бы предположением.
5. для (float i=0; i< [topicNew count]; i ) { NSDictionary *new= [topicNew objectAtIndex:i]; NSString *imageName = [[[NSString alloc] initWithFormat:@»%@.%@.%@. png», AppDelegate.subject,topicNamed,[новый objectForKey:kWordTitleKey]] авторелиз]; NSString *ImagePath = [[каталог документов для самостоятельного применения] stringByAppendingPathComponent:imageName]; NSData *ImageData = [путь для самостоятельного анализа: [новый objectForKey:kWordImagePathKey]]; [progressView setProgress: i/[Количество новых тем]]; [lblpercent setText:[[NSString stringWithFormat:@»%.0f», i / [Количество новых тем]] stringByAppendingString:@»%»]];
Ответ №1:
Похоже, что вы блокируете свой основной поток. Это означает, что вы обновляете progressView, но mainthread никогда не выходит из вашего цикла 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:
метода.
Надеюсь, это сразу приведет вас к нужному результату