繁体   English   中英

即使在主线程中运行,UIProgressView进度也不会更新

[英]UIProgressView progress not updating even when run in the main thread

UIProgressView进度不会在iOS8和9中更新,但即使在主线程中运行,也可以在iOS7中运行。 我的代码如下,希望有所帮助。

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    self.timer = [NSTimer scheduledTimerWithTimeInterval: 0.1f target:self selector: @selector(handleProgressBar) userInfo: nil repeats: YES];
}

- (void) handleProgressBar{
    if(self.usedTime >= 300.0)
    {
        [self.timer invalidate];
        self.timer=nil;
        [self submitAns:[NSNumber numberWithInt:-1]];
    }
    else
    {
        self.usedTime += 1;
        CGFloat progress = self.usedTime*(0.0033333333);

        [self performSelectorOnMainThread:@selector(updateProgress:) withObject:[NSNumber numberWithFloat:progress] waitUntilDone:NO];
        if(self.usedTime>200){
            [self.progressBar setProgressTintColor:[UIColor redColor]];}
    }
}

- (void)updateProgress:(NSNumber *)progress {
    float fprogress = [progress floatValue];
    //self.progressBar.progress = fprogress;
    [self.progressBar setProgress:fprogress animated:YES];
}
@property (strong, nonatomic) UIProgressView    *progressView;
@property (nonatomic)        CGFloat            usedTime;

我把它放在viewDidLoad方法中

 _progressView = [[UIProgressView alloc] initWithFrame:CGRectMake(0, 500,  self.view.bounds.size.width, 50)];
[self.progressView setProgress:0.0];

[self.view addSubview:self.progressView];

 self.timer = [NSTimer scheduledTimerWithTimeInterval: 0.1f target:self selector: @selector(handleProgressBar) userInfo: nil repeats: YES];

[![enter image description here][1]][1]//-----------------------------------------------------------------------

- (void) handleProgressBar{
if(self.usedTime >= 300.0)
{
    [self.timer invalidate];
    self.timer=nil;
  //  [self submitAns:[NSNumber numberWithInt:-1]];
}
else
{
    self.usedTime += 1;
    CGFloat progress = self.usedTime*(0.0033333333);

    [self performSelectorOnMainThread:@selector(updateProgress:) withObject:[NSNumber numberWithFloat:progress] waitUntilDone:NO];
    if(self.usedTime>200){
        [self.progressView setProgressTintColor:[UIColor redColor]];}
}
}


//-----------------------------------------------------------------------


- (void)updateProgress:(NSNumber *)progress {
float fprogress = [progress floatValue];
//self.progressBar.progress = fprogress;
[self.progressView setProgress:fprogress animated:YES];
}

//-----------------------------------------------------------------------

为我工作

暂无
暂无

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

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