0

この質問は以前に尋ねられましたが、答えがうまくいきません。(間違っていたら訂正してください) メイン スレッドが UI を更新することはわかっているので、ループ内でメイン スレッドを呼び出す必要があります。私はこれを試していますが、プログレスバーはループの最後にのみ更新されます(0%から100%になります)

ここに私のコードがあります

.h

@interface ViewController : UIViewController <UITextFieldDelegate> {
IBOutlet UIProgressView *progressBar;
float progressBarPercentage;
}
-(IBAction)button:(id)sender;

@end

.m

-(IBAction)button:(id)sender{

for (int z=0; z < 9; z++){

//do stuff

float progressBarPercentage = (1.0 / 9.0 * (z + 1));
        [self performSelectorOnMainThread:@selector(makeMyProgressBarMove) withObject:nil waitUntilDone:NO];

}

}

-(void)makeMyProgressBarMove{

    [progressBar setProgress:progressBarPercentage animated:YES];
     }

デバッグ モードで実行しているときに、行[self performSelectorOnMainThread:@selector(makeMyProgressBarMove) withObject:nil waitUntilDone:NO];に到達すると 1makeMyProgressBarMove:` に移動せずにループを再開するだけであることに気付きました。

また、その//do stuff部分は短くなく、実際にはボタンを押してからコードを実行するのに 5 秒かかるため、更新が速すぎて見えないわけではありません。

ありがとうございます。さらに情報が必要な場合はお知らせください。私はまだ初心者です。

4

2 に答える 2

0

別のスレッドでも「Do Stuff」する必要があります。そうしないと、メインスレッドがブロックされます。performSelectorOnMainThreadすでにメインスレッドにいる場合は役に立たないことに注意してください。

はるかに簡単なため、libdispatchを使用します。

-(IBAction)button:(id)sender{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        for (int z=0; z < 9; z++)
        {
            //do stuff

            float progressBarPercentage = (1.0 / 9.0 * (z + 1));

            dispatch_async(dispatch_get_main_queue(), ^{
                [progressBar setProgress:progressBarPercentage animated:YES];
            });
        }
    });
}
于 2014-01-29T16:10:06.190 に答える
-1

今これを試してください

 -(IBAction)button:(id)sender{

    for (int z=0; z < 9; z++){

    //do stuff

    float progressBarPercentage = (1.0 / 9.0 * (z + 1));
            [self performSelectorOnMainThread:@selector(makeMyProgressBarMove) withObject:nil waitUntilDone:YES];

    }

    }

    -(void)makeMyProgressBarMove{

        [progressBar setProgress:progressBarPercentage animated:YES];
         }
于 2014-01-29T16:03:34.033 に答える