iOSの進捗表示にMBProgressHUDを使う
iOSにはUIProgressHUDという進捗表示用のインジケータ表示が有るのだけど、残念ながらこれは公式APIではないので、これを使ったアプリケーションはAppleに申請してもリジェクトされてしまう。
画面表示だけなので自分で似たような表示を作っても良いものの、今回は手っ取り早く仕上げるために、代替としてMBProgressHUDを使ってみた。ソースコードやサンプルプロジェクト、画面キャプチャが下記のgithubに載っている。(ライセンスはMIT)
MBProgressHUD is an iPhone drop-in class that displays a translucent HUD with a progress indicator and some optional labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features.
GitHub - jdg/MBProgressHUD: MBProgressHUD + Customizations
MBProgressHUD is iOS4 and iPad compatible and released under the MIT license (see MBProgressHUD.h).
iOS4では、Blocksを使うとコードの見通しが良いだろう。
- (IBAction)showUsingBlocks:(id)sender { dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ // Show the HUD in the main tread dispatch_async(dispatch_get_main_queue(), ^{ // No need to hod onto (retain) MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES]; hud.labelText = @"Loading"; }); // Do a taks in the background [self myTask]; // Hide the HUD in the main tread dispatch_async(dispatch_get_main_queue(), ^{ [MBProgressHUD hideHUDForView:self.navigationController.view animated:YES]; }); }); }
デモプロジェクトを動かしてみれば分かるように、プログレス表示時にはズーム付きのフェードイン・アウトの気の利いたアニメーションが効いている。表示形式の種類は豊富だし、簡単に使えるのでお勧めだ。