いくつかの時間がかかるいくつかのUI要素をインスタンス化している間、プログレスバーを更新したいと思います。私は最初にviewLoadメソッド中に私のビューを作成し、そこに進捗バーを追加します。 viewDidAppearメソッドで私のビューが表示されたら、私はいくつかのuikitオブジェクトのインスタンスを作成していますが、私は平均時間内にプログレスバーを更新したいと思います。どのように進むべきかわからないのは、メインスレッドですべてがUi要素として発生するはずだからです。ここでタイムコンシューマUI要素のインスタンス化中にプログレスバーを更新するにはどうすればよいですか?
は、私のコードの一部です:上記のコードで
-(void) viewDidAppear:(BOOL)animated
{
// precompute the source and destination view screenshots for the custom segue
self.sourceScreenshotView = [[UIImageView alloc] initWithImage:[self.view pw_imageSnapshot]];
[self.progressBar setProgress:.3];
SCLViewController *rvc = [[SCLViewController alloc] init];
UIView *destinationView = rvc.view;
destinationView.frame = CGRectMake(0, 0, kWidthLandscape, kHeightLandscape);
self.destinationScreenshotView = [[UIImageView alloc] initWithImage:[destinationView pw_imageSnapshot]];
[self.progressBar setProgress:.5];
}
私は後でそれらを使用するビューの2枚のスクリーンショットを作成する必要があります。問題は、進行状況を進行状況バーに設定するときに、最後の更新(.5)しか表示されないということです。このアップデートを行う適切な方法は何ですか?
これは動作します - ありがとう!だからそれはOKですいくつかのUIVIバックグラウンドスレッドのインスタンス化ですか?私はuikitオブジェクトのすべての操作は、メインスレッドでのみ行う必要があると思った。また、各インスタンシエーションの後に設定したものに到達するまで進捗状況をスムーズに更新する方法についてもう少し詳しく説明できますか? – tiguero
はい、バックグラウンドスレッドでビューをインスタンス化できます。メインスレッドで行う必要があることは、再描画(サブビューの追加やプロパティの変更など)を意味するすべてのことです。 スムーズな進歩についてお話ししたことは、まあ、プログレスバーを更新するためにあなたがどの瞬間にいるのかをあなたに知らせるデザインが必要です。今は、初期化がいつ開始され、いつ終了するかを知っているだけです。この初期化が一連の既知の手順である場合、その手順の間にコードを追加して、誰か(デリゲート)に進行状況バーを更新するように指示できます。 –