0

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

CGAffineTransform transform = CGAffineTransformMakeScale(1.0f, 3.0f);
PgView.transform = transform;

我需要实现的是:如果我有 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{

    }
}

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

提前致谢。

4

1 回答 1

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];
}

现在,一个计时器仍用于演示调用“updateReceivedData”,它只是递增“receivedData”并调用“updateProgressBar”。如您所见,'updateReceivedData' 不会线性增加,再次只是为了演示。如果计时器将按需调用“updateReceivedData”,那么进度条也将按需更新。现在这只是一个关于如何以及何时更新收到的数据的问题。这不是关于进度条的问题。

于 2012-10-07T03:58:04.240 回答