繁体   English   中英

UIProgressView没有更新?

[英]UIProgressView not updating?

我已经开始在iOS5中使用UIProgressView了,但还没有真正的运气。 我无法更新视图。 在每次更新进度后,我都有一系列顺序操作。 问题是,进度视图不是一点一点地更新,而是仅在完成后才更新。 它是这样的:

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

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

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

是的,进度视图的整个目的是用于线程化。

如果您在主线程上运行该循环,则会阻止UI。 如果您阻止UI,则用户可以进行交互,并且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];
}

.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调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM