目标c:如何动态设置uiprogressview的时间和进度?

Sar*_*rah 0 objective-c nstimer uiprogressview

假设我有一个大小为(394,129,328,9)的UIProgressBar,我增加了高度

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
PgView.transform = transform;
Run Code Online (Sandbox Code Playgroud)

我需要实现的是:如果我有5分钟的时间,progressView应填充一定数量,并在5分钟结束时完全填充.同样1分30分钟.

我这样实现:

-(void)viewWillAppear:(BOOL)animated
{
    CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
    PgView.transform = transform;

    recievedData = 0.01;
    xpectedTotalSize = 1.0;
    PgView.progress = 0.0;
    [self performSelectorOnMainThread:@selector(makeMyProgressBarMoving) withObject:nil waitUntilDone:NO];
}

- (void)makeMyProgressBarMoving
{
    float actual = [PgView progress];
    if (actual < 1)
    {
        PgView.progress = actual + ((float)recievedData/(float)xpectedTotalSize);
        [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(makeMyProgressBarMoving) userInfo:nil repeats:NO];
    }
    else{

    }
}
Run Code Online (Sandbox Code Playgroud)

它有效.但是我想动态地实现进度和时间间隔?任何的想法??

提前致谢.

Jen*_*rth 7

很难理解你的意图.正如我想的那样,只有在新值可用时才更新进度条,而不是使用固定的计时器间隔进行更新.

这将导致简单的答案:每当您更改"recievedData"的值时,都会更新进度条.因此,'makeMyProgressBarMoving'方法不需要计时器.此外,您不需要记住"实际"值.您可以直接将"receivedData/xpectedTotalSize"分配给进度条.

- (void) updateProgressBar
{
    PgView.progress =  ((float)receivedData/(float)xpectedTotalSize);
}

- (void) updateReceivedData
{
    if (receivedData < 20)
        receivedData += 1.0;
    else
        receivedData += 10.0;

    [self updateProgressBar];
}

-(void)viewWillAppear:(BOOL)animated
{
    receivedData = 0.0;
    xpectedTotalSize = 100.0;

    [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateReceivedData) userInfo:nil repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)

现在,仍然使用一个计时器来演示调用'updateReceivedData',它只增加'receivedData'并调用'updateProgressBar'.如您所见,'updateReceivedData'不会线性增加,仅用于演示.如果'updateReceivedData'将根据需要而不是定时器调用,那么进度条也将按需更新.现在只是一个关于如何以及何时更新receivedData的问题.这不是关于进度条的问题.