読み込みに2秒以上かかる非常に重いビューがあります。viewDidLoadですべてのものを運んでいる間、アクティビティインジケーターを表示してから、非表示にします。誰かが私にこれをするように導くことができますか?前もって感謝します。
5 に答える
MatejBukovinskiによるMBProgressHUDをお試しください。
https://github.com/matej/MBProgressHUD
バックグラウンドでデータを取得する
HUD = [[MBProgressHUD alloc] initWithView:self.navigationController.view];
[self.navigationController.view addSubview:HUD];
HUD.delegate = self;
HUD.labelText = @"Loading";
[HUD showWhileExecuting:@selector(getStartupData:)
onTarget:self
withObject:nil
animated:YES]
メインスレッドでデータを取得したい場合は、HUDを表示し、通知されたらそれを閉じます。
HUD = [[MBProgressHUD alloc] initWithView:self.tableView];
[self.tableView addSubview:HUD];
HUD.labelText = @"Loading";
HUD.tag = 998;
[HUD show:YES];
[HUD release];
確かなことはわかりませんが、バックグラウンドスレッドでviewDidLoadを実行できるかどうかは疑問です。これが当てはまる場合、viewDidLoadの実行時にアクティビティインジケーターをアニメーション化する方法はありません。
ですから、もし私があなたなら、viewDidLoadに何がかかるのかを理解し、これをバックグラウンドで実行できるメソッドに入れます。
次に、viewWillAppearメソッドにアクティビティインジケータービューを追加し、バックグラウンドタスクが完了したらそれを削除します。
viewDidLoadで行う処理によっては、これには多くのリファクタリングとデリゲートメソッドの追加が必要になる場合があります。
表示されるべきものをダウンロードしていると思います。
非常に時間がかかるものをviewDidAppearに移動してみてください。次に、アクティビティインジケーターを使用して新しいビューを作成し、それを表示することができます(Interface Builderで最も簡単です)。すべての作業が完了したら、次のコマンドを呼び出すだけです。
[loadingView setHidden:YES];
幸運を
低速読み込みのviewController[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
を呼び出した場所からビューに配置するか、低速スターターが初期ビューの場合はappDidFinishLoadingに配置します。
さらに、GUIを常に応答性のある状態に保ちながら、時間のかかるアクティビティをメインスレッドからバックグラウンドスレッドに移動することを検討してください。
これはviewDidLoadで非常に簡単に行うことができます
UIAactivityIndicatorView * date = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(150, 150, 30, 30)];
[date setActivityIndicatorViewStyle:UIActivityIndicatorViewStyleGray];
[self.view addsubview:date];
[date startAnimating];
ページビューを読み込んだ後、[datestopAnimating]でアクティビティインジケーターのアニメーション化を停止します。
これはうまくいくでしょう