2009-05-07 12 views
1

いつでも再利用できるローディング画面を作成するにはどうすればいいですか?私はDefault.pngを認識していますが、アプリケーションのライフサイクルのどの時点でもロードする画面を柔軟に接続する必要があります。再利用可能なローディング画面を作成するにはどうすればよいですか?

これはこれまで私が行ったことです。

//inside a method that gets called by a UIButton 

LoadingViewController* loadController = [[LoadingViewController alloc] initWithNibName:@"Loading" bundle:nil vertical:NO]; 
[self.view addSubview: loadController.view]; 

//some method call that takes a few seconds to execute 
[self doSomething]; 

//This loads some other view, my final view 
[self.view addSubview: someOtherView] 

しかし、ローディングビューは表示されないようです。代わりに、前のビューは "someOtherView"が追加されるまでそこにとどまります。私はトレースログを入れてコードが実行されるように見えますが、私は[self doSomething]をsleep(2)に置き換えましたが、中間ローディングビューは決して表示されません。

[self.view addSubview:someOtherView]を削除した場合。数秒後に...(doSomethingの実行が終了した後に)ロードビューが表示されます。そのビューにはプッシュされていないビューがありますが、これは明らかに必要な機能ではありません。

この現象について説明できますか?私が[self.view addSubview:loadController.view]を呼び出しても、(少なくとも画面上の)ビューが即座に更新されるようには見えないので、私が誤解しているレンダリングサイクルについて何かありますか?

別のスレッドを作成する必要がありますか?

答えて

4

...すべて私viewcontrollersで

[self showloadingMessage:@"loading..."]; 

UIがユーザーに表示されるようにするには、コントロールをメインのrunLoopに戻す必要があります。ローディングビューを下に置き、別のビューに置き換えた後でのみ、runLoopに戻ります。これに対処するための1つの戦略は、読み込みを行うコードを別のスレッドに移動することです。これにNSOperationとNSOperationQueueを使用できます。

さらに簡単な方法は、performSelectorInBackground:withObjectを使用して処理を行うことです。処理が完了すると、UIを再度更新してデータを表示することができます。 UI更新はメインスレッドで実行する必要があることを覚えておくことが重要です。 performSelectorOnMainThread:withObject:waitUntilDone:を使用して、読み込みスレッドからこれを達成します。

これは、合併症の多くのように聞こえるが、それは本当に、次のように3つの別々の方法にあなたの単一のメソッドを壊すのと同じくらい簡単です:

  • は、ロードビューを表示し、バックグラウンド・プロセスを開始する - これはボタンですアクションメソッド。
  • performSelectorInBackground:withObjectのボタンアクション関数からバックグラウンド読み込みを実行します。
  • ローディングビューを削除し、performSelectorOnMainThread:withObject:waitUntilDoneを使用してバックグラウンドスレッドから呼び出されたデータでディスプレイを更新します。
1

私はUIViewのサブクラスを作成しました。そこでは、ロードビューがどのように動作し、どのように表示されるべきかを初期化しました。 (私の見解が現れて、下から素敵なアニメーションで滑り落ちました)。

次に、ロードビューをUIViewControllerのサブクラスで表示するかどうかを処理するコードを追加しました。

私は、すべて私のviewcontrollersはそれが可能私が行うために作られた私の新しいviewcontrollerclassのサブクラスでみましょう:の変化のために、一般的には

関連する問題