我已经开始在iOS5中与UIProgressView玩,但还没有真正有运气吧。 我无法更新视图。 我有一组顺序动作,每个后,我更新的进展。 问题是,发展观是不是一点,但只有全部完成后更新少。 它是这样的东西:
float cnt = 0.2;
for (Photo *photo in [Photo photos]) {
[photos addObject:[photo createJSON]];
[progressBar setProgress:cnt animated:YES];
cnt += 0.2;
}
浏览堆栈溢出,我已经发现帖子这样的- setProgress不再更新UIProgressView因为iOS 5中 ,为了暗示这个工作,我需要运行一个单独的线程。
我想澄清这一点,我真的需要单独的线程来UIProgressView正常工作?
是的进度视图的整个目的是为了线程。
如果你正在运行的主线程上环你阻塞UI。 如果你阻止用户界面,那么用户可以交互和用户界面无法更新。 你应该做在后台线程所有繁重和更新主线程的UI。
下面有一个小样本
- (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];
}
定义UIProgressView
中.h
文件:
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)。 如果调用setProgress与诠释,它不会像更新UISlider。 每个人都应该有浮点值调用它只是从0到1。