SVProgressHUDでかっこよくLoading(読み込み中)表示

iOSアプリでデータ取得中やWebページの読み込み中に処理中であることを示すためにUIActivityIndicatorViewを使用することが多いと思いますが、もう少しかっこよくスタイリッシュに表示したい場合にSVProgressHUDというOSSが便利だったので紹介したいと思います。

同じような機能を持ったライブラリにMBProgressHUDがありますが、こちらよりもシンプルで使いやすいです。ライセンスはMITライセンスです。ちなみにHUDとはUIKitに含まれているUIProgressHUDクラスのことですが、こちらはUndocumentedな非公開クラスのため、おそらくリジェクト対象になります。
f:id:murapong:20120522165932p:image

インストール

  1. SVProgressHUD.h/mをプロジェクトに追加する
  2. プロジェクトにQuartzCore.frameworkを追加する

使い方

基本的には、HUDを表示させたい時に[SVProgressHUD show]、非表示にしたいときに[SVProgressHUD dissmiss]のようにSVProgressHUDのクラスメソッドを呼ぶだけです。

インジケータ付きHUD表示メソッド。

+ (void)show;
+ (void)showWithStatus:(NSString*)status;
+ (void)showWithStatus:(NSString*)status maskType:(SVProgressHUDMaskType)maskType;
+ (void)showWithMaskType:(SVProgressHUDMaskType)maskType;

非表示系メソッド。

+ (void)dismiss;
+ (void)dismissWithSuccess:(NSString*)successString;
+ (void)dismissWithSuccess:(NSString*)successString afterDelay:(NSTimeInterval)seconds;
+ (void)dismissWithError:(NSString*)errorString;
+ (void)dismissWithError:(NSString*)errorString afterDelay:(NSTimeInterval)seconds;

maskTypeでHUD表示時の挙動(ユーザ操作、背景)を変更することができます。

enum {
    SVProgressHUDMaskTypeNone = 1, // ユーザ操作可(デフォルト)
    SVProgressHUDMaskTypeClear, // ユーザ操作不可
    SVProgressHUDMaskTypeBlack, // ユーザ操作不可、背景が薄暗くなる
    SVProgressHUDMaskTypeGradient // ユーザ操作不可、alertViewっぽいグラデーションで背景が薄暗くなる
};

確認/完了メッセージを表示するには以下のメソッドを使用します。

+ (void)showSuccessWithStatus:(NSString*)string;
+ (void)showSuccessWithStatus:(NSString *)string duration:(NSTimeInterval)duration;
+ (void)showErrorWithStatus:(NSString *)string;
+ (void)showErrorWithStatus:(NSString *)string duration:(NSTimeInterval)duration;

HUDの表示中にメッセージを変更したい場合は、以下のメソッドを使用します。HUDのメッセージを段階的に変えたいときなどに便利です。

+ (void)setStatus:(NSString*)string; // change the HUD loading status while it's showing

参考

最後のMRC(手動参照カウント)ブランチ
https://github.com/samvermette/SVProgressHUD/tree/last-mrc