0

我正在使用 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:@"%"]];

...更多代码在这里...

4

1 回答 1

0

看起来你正在线程锁定你的主线程。意思是,您正在更新 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:方法。

希望这能让你直接正确

于 2013-04-01T19:05:07.917 回答