UIProgressView无法准确显示进度

时间:2011-05-07 08:56:35

标签: label 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 :(得分: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:方法。

希望直接让你直接进入