さて、コードに問題があります。imageViewersを使用してゲームのようなグリッドを作成したいのですが、imageViewersがどのように画像を変更するかをメソッドが実行すると、それを行う行が実際に実行されたときではなく、実行が終了したときにのみ画面/imageviewersが更新されます。無限ループを含むメソッドがあり、ボタンを押すと imageViewers の画像が変更されます。ボタンは、ブール変数を true に変更するメソッドを呼び出すため、メインのゲーム ループは、特定の変数が true かどうかを常にチェックすることで、何が押されたかを認識します。しかし、ゲーム ループが終了しないため、画面が更新されることはありません。実行中に画面の内容を更新する方法はありますか?
このコードを使用して、imageViewers の内容を変更しています。
UIImage * white = [UIImage imageNamed: @"White.png"];
UIImage * blue = [UIImage imageNamed: @"Blue.png"];
int tagInt=1;
for (int y = 0;y<10;y++){
for (int x = 0;x<10;x++){
UIImageView *imageView;
imageView = [[UIImageView alloc] initWithImage:white]; imageView.frame =CGRectMake(x*32,y*37,32,37);
imageView.image = white;
imageView.tag=tagInt;
[self.view addSubview:imageView];
tagInt++;
}
}
for (int u = 1;u<20;u++){
[NSThread sleepForTimeInterval:(1)];
UIImageView *g = (UIImageView*)[self.view viewWithTag:u];
g.image =blue;
}
私の実際のコードは長すぎるため、これは不自然な例ですが、同じ問題があります。コード行の実行時ではなく、最後の for ループ (この遅延/スレッド スリープ コマンド) が終了した後にのみ画面上で更新されます。
編集: コンテキストが必要な場合のプロジェクトは次のとおりです: https://www.dropbox.com/s/cvefllnhgj0tp6g/Stacker.zip