このエントリーをはてなブックマークに追加

2017年1月4日水曜日

ネットワークインジケータとAlamofireNetworkActivityIndicator

 こんにちは、Hiroです。
 iOSアプリ開発において、API通信での通信中は、ステータスバーにネットワークインジケータを表示させると思いますが、API通信部分でAlamofireを利用している場合、AlamofireNetworkActivityIndicatorを使うと表示・非表示を勝手に制御してくれます。とても便利なので、今回はこちらをご紹介したいと思います。
注)AlamofireNetworkActivityIndicatorは、2016年12月24日時点で、最新バージョンの2.1.0を対象にしています。


CocoaPodsでインストール


まずは、Alamofireを利用中ということを前提としています。
Podfileに下記を記載して、インストールします。
  use_frameworks!

  pod 'Alamofire'
  pod 'AlamofireNetworkActivityIndicator'
$ pod install


swiftコード上での設定


CocoaPodsでのインストールが完了したら、AppDelegate.swiftでAlamofireNetworkActivityIndicatorの設定をします。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    NetworkActivityIndicatorManager.shared.isEnabled = true
    NetworkActivityIndicatorManager.shared.startDelay = 0
    NetworkActivityIndicatorManager.shared.completionDelay = 0.2
    return true
}
以上で、Alamofire.requestで通信を開始するとステータスバーにネットワークインジケータが表示され、通信が終了すると非表示になります。


AlamofireNetworkActivityIndicator設定値の説明

NetworkActivityIndicatorManager.sharedManager.isEnabled

この設定を「true」にするだけで、基本的には設定完了となります。
残りの「startDelay」と「completionDelay」は、下記で説明しますが、基本的にはオプションでデフォルト値があります。

NetworkActivityIndicatorManager.sharedManager.startDelay

通信が開始されて、この設定値の秒数後にインジケータが表示されます。
デフォルト値は、1.0となっており、通信が早く完了すると表示されないこともあるため、0を設定することの方が多いです。

NetworkActivityIndicatorManager.sharedManager.completionDelay

通信が完了して、この設定値の秒数後にインジケータが非表示になります。
デフォルト値は、0.2となっています。


Alamofireを使わない場合(WebViewなど)


Alamofireを使わない場合は、本内容の設定をしてもステータスバーにネットワークインジケータが表示されることはりません。
その場合、自前で通信開始時と終了時に下記の設定を記述する必要があります。
通信開始時にネットワークインジケータの表示:
UIApplication.shared.isNetworkActivityIndicatorVisible = true
通信終了時にネットワークインジケータの非表示:
UIApplication.shared.isNetworkActivityIndicatorVisible = false

0 件のコメント:

コメントを投稿