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/expectedTotalSize」を進行状況バーに直接割り当てることができます。

- (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」がオンデマンドで呼び出される場合、プログレス バーもオンデマンドで更新されます。これは、receivedData をいつ、どのように更新するかという問題にすぎません。プログレスバーに関する問題ではありません。

于 2012-10-07T03:58:04.240 に答える