0

重い UI の更新中にアクティビティ インジケーターを表示しようとしました。

私の最初の失敗した試みは

  1. view1 にアクティビティ インジケータを表示
  2. pushViewController (この viewController のビューの作成には時間がかかります)
  3. view1 の viewDidDisappear 時 (pushViewController のプッシュ アニメーションが発生した時)、アクティビティ インジケーターを非表示にします

問題は、pushViewController の前に「show activity indicator」を呼び出したにもかかわらず、プッシュされていた viewController のビューを作成する際に発生した重い UI のために、アクティビティ インジケータが表示されないことでした。

戦略を次のように変更しましたが、うまくいきましたが、理由がわかりません。

  1. pushViewController
  2. viewController の viewDidLoad でアクティビティ インジケータを表示する
  3. viewDidAppear で重い UI の読み込みを行い、インジケーターを非表示にします

最初の方法でインジケーターが表示されなかった理由は、重い UI プロセスが原因だったという印象を受けました。
リンク先の議論を参照してください。 (iphone) 重い UI の更新前にアクティビティ インジケーターを表示する

キューの UI 更新が多すぎて UI 更新が遅れる (インジケーターが表示されない) 場合、2 番目の方法で違いが生じるのはなぜですか?

viewDidLoad は、ビューが作成されたときにのみ呼び出されることを知っています。
ビューが実際に画面に表示されると、viewDidAppear が呼び出されます (したがって、複数回呼び出すことができます)。

しかし、viewDidAppear を使用する 2 番目のアプローチが私の状況で機能する理由を説明する根本的な違いはありますか?

また、いわゆるメインスレッドとは別に UI 更新スレッドはありますか? または、メイン スレッドは UI 更新スレッドですか?

ありがとうございました

4

1 に答える 1

0

まず、メインスレッドでUIKitUIを更新していることを確認したいと思います。これは必須です。メインスレッドを使用するように言わない限り、UIKitで作業するときにスレッドを指定する必要はありませんが、それは冗長になると思います。

viewWillAppearでアクティビティインジケーターを開始します。次に、viewDidLoadに他のすべてをロードします。

于 2011-04-22T18:54:58.553 に答える