我使用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:@"%"]];
...这里有更多代码...
答案 0 :(得分:0)
看起来你正在线程锁定主线程。这意味着,您正在更新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:
方法。
希望直接让你直接进入