2

Quartz を使用していくつかの画像を処理するアプリがあり、各アクションの後に変化する UIProgressView が必要でした。(例: 0.0 0.2 0.4 0.6 0.8 1.0)

問題は、私の画像が処理されている間、UI が完全にロックされているように見え、すべてのプロセスが完了した後にのみ値が変更されることです (つまり、サブステップを経ずに 1.0 になるだけです)。

これに遭遇した人はいますか?

擬似:

for(uint i=0;i<5;i++){
    // Execute some Quartz based action here, such as CGContextDrawTiledImage etc...
    myProgress.progress = (i+1) * 0.2;          
}

実際には、各アクションの後にプログレス バーが変化する代わりに、最後に一度だけ 1.0 に変化します。フィードバックや経験、またはこれをいただければ幸いです。

ありがとう
シャイ。

4

1 に答える 1

2

2 つが並行して更新できるように、別のスレッドでアセットまたはプログレス バーのいずれかを更新する必要があります。

見て[NSThread detachNewThreadSelector:selector toTarget:target withObject:object];

進行状況をメンバー変数にする

 [NSThread detachNewThreadSelector:@selector(updateFilterProgress) toTarget:self withObject:nil];

 prgLoader.progress = x;


- (void) updateFilterProgress{

    NSAutoreleasePool *pool = [NSAutoreleasePool new];

    while ([prgLoader.progress floatValue] < 1.0f)    //Keep this thread alive till done loading. You might want to include a way to escape (a BOOL flag)
    {
        GTMLoggerInfo(@"Updating progress to %f", [progress floatValue]);
        prgLoader.progress = [progress floatValue];
    }
    [pool release];

}
于 2011-09-02T11:19:09.080 に答える