UIProgressView不更新?(UIProgressView not updating?)

2019-07-30 03:06发布

我已经开始在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正常工作?

Answer 1:

是的进度视图的整个目的是为了线程。

如果你正在运行的主线程上环你阻塞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];
}


Answer 2:

定义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++;

}


Answer 3:

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

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

我在setProgress部分进展之前有(INT)。 如果调用setProgress与诠释,它不会像更新UISlider。 每个人都应该有浮点值调用它只是从0到1。



文章来源: UIProgressView not updating?