UIProgressView不更新?

我已经开始在iOS5中使用UIProgressView,但没有真正运气。 我无法更新视图。 我有一套连续的行动,每次我更新进度后。 问题是,进度视图不是一点一点更新,而是完成之后。 它是这样的:

float cnt = 0.2; for (Photo *photo in [Photo photos]) { [photos addObject:[photo createJSON]]; [progressBar setProgress:cnt animated:YES]; cnt += 0.2; } 

浏览堆栈溢出,我发现这些post – setProgress不再更新UIProgressView自iOS 5以来 ,暗示为了这个工作,我需要运行一个单独的线程。

我想澄清这一点,我真的需要单独的线程为UIProgressView正常工作?

是的,进展观的全部目的是针对线程。

如果您在主线程上运行该循环,则会阻止用户界面。 如果您阻止用户界面,则用户可以进行交互,用户界面无法更新。 YOu应该在后台线程上做所有繁重的工作,并更新主线程上的UI。

inheritance人一点样品

 - (void)viewDidLoad { [super viewDidLoad]; [self performSelectorInBackground:@selector(backgroundProcess) withObject:nil]; } - (void)backgroundProcess { for (int i = 0; i < 500; i++) { // Do Work... // Update UI [self performSelectorOnMainThread:@selector(setLoaderProgress:) withObject:[NSNumber numberWithFloat:i/500.0] waitUntilDone:NO]; } } - (void)setLoaderProgress:(NSNumber *)number { [progressView setProgress:number.floatValue animated:YES]; } 

.h文件中定义UIProgressView

 IBOutlet UIProgressView *progress1; 

.m文件中:

 test=1.0; progress1.progress = 0.0; [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO]; - (void)makeMyProgressBarMoving { NSLog(@"test %f",test); float actual = [progress1 progress]; NSLog(@"actual %f",actual); if (progress1.progress >1.0){ progress1.progress = 0.0; test=0.0; } NSLog(@"progress1.progress %f",progress1.progress); lbl4.text=[NSString stringWithFormat:@" %i %%",(int)((progress1.progress) * 100) ] ; progress1.progress = test/100.00;//actual + ((float)recievedData/(float)xpectedTotalSize); [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO]; test++; } 

我有类似的问题。 UIProgressView没有更新,虽然我setProgress,甚至尝试setNeedsDisplay等

 float progress = (float)currentPlaybackTime / (float)totalPlaybackTime; [self.progressView setProgress:progress animated:YES]; 

我在setProgress部分进行之前已经(int)了。 如果你用int调用setProgress,它将不会像UISlider那样更新。 应该只用0到1的浮点值来调用它。