2011年12月5日月曜日

MTStatusBarOverlayでステータスバー改造


ステータスバーに細かい通信状況を表示するのに、MTStatusBarOverlayというオープンソースのライブラリが便利だったのでメモ。ReederやEvernoteアプリが通信時にステータスバーに詳しい状況表示をやっているアレです。













1. MTStatusBarOverlayダウンロード

まずgithubからMTStatusBarOverlayを落としてきます。
https://github.com/myell0w/MTStatusBarOverlay




2. MTStatusBarOverlay.m+hを組み込む

落としてきたプロジェクトの中からMTStatusBarOverlay.mとMTStatusBarOverlay.hを自分のプロジェクトに組み込みます。




3. MTStatusBarOverlayを呼ぶ

どこでもいいので、ステータスバーに表示を行いたい処理の中で以下のコードを書きます。
- (IBAction)buttonPushed:(id)sender {
    
    MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];
    overlay.animation = MTStatusBarOverlayAnimationFallDown;
    overlay.historyEnabled = NO;
    overlay.progress = 0.0;
    [overlay postMessage:@"わたしは通信中"];
}

たったこれだけで、このようなステータスバーが表示されます。



4. メッセージを更新

ステータスバーのメッセージを更新する際も、どこでもいいのでMTStatusBarOverlayのインスタンスに対して以下の様な呼び出しをします。
MTStatusBarOverlayはシングルトンなので、基本的にどこでもステータスバーをカスタマイズしたい処理で、MTStatusBarOverlayインスタンスを取得してメッセージを渡します。

    MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];
    [overlay postMessage:@"私はまだ更新中"];    


メッセージ内容が変わりましたね。




5. ステータスバーを閉じる

ステータスバーを閉じるには、MTStatusBarOverlayのインスタンスに対してpostImmediateFinishMessageを呼び出します。
    
    MTStatusBarOverlay *overlay = [MTStatusBarOverlay sharedInstance];
    [overlay postImmediateFinishMessage:@"通信完了!" duration:2.0 animated:YES];


すると、メッセージにした文字列をdurationで指定した秒数の間表示し、ステータスバーがフェードアウトします。



以上です。
MTStatusBarOverlayはiPadでも利用でき、他にも機能が盛り沢山なので
またそのうち続きを書きます。