この質問は以前に尋ねられましたが、答えがうまくいきません。(間違っていたら訂正してください) メイン スレッドが 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 秒かかるため、更新が速すぎて見えないわけではありません。
ありがとうございます。さらに情報が必要な場合はお知らせください。私はまだ初心者です。