LoginSignup
6
4

More than 5 years have passed since last update.

SVProgressHUDで遅延処理してdismissする

Posted at

ローディング中に通信環境が悪い時に止まっているように見えるのを防ぐためにSVProgressHUDを使ってロード中アニメーションを使った。

loadingStateはenum型の列挙型。

public enum LoadingState {
    case None
    case InProgress
    case Success
    case Failure
}
viewModel.loadingState.observeNew { state in
    switch state {
    case .InProgress :
        SVProgressHUD.initializeAndShow()
    default :
       SVProgressHUD.dismiss()
       self.refreshControl.endRefreshing()
    }
}

ただ、通信処理が早く終わってしまうとぐるぐるが出てすぐ消える、ということが発生してしまい使っていて不快なので、通信処理が終わったら何秒かdelayさせてからぐるぐるを消すようにしました。

SVProgressHUD.swift
import SVProgressHUD

extension SVProgressHUD {
    //省略

   class func delayAndDismiss(time: Double){
        let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(time * Double(NSEC_PER_SEC)))
        dispatch_after(delayTime, dispatch_get_main_queue()) {
            self.dismiss()
        }
    }
}
viewModel.loadingState.observeNew { state in
    switch state {
    case .InProgress :
        SVProgressHUD.initializeAndShow()
    default :
       // 通信処理が終わってから0.5秒delayさせる
       SVProgressHUD.delayAndDismiss(0.5)
       self.refreshControl.endRefreshing()
    }
}



しかしながらこれだと通信処理が長い場合も、処理が終わったらdelayされてしまうので処理時間がxx秒以上だとdelayさせないようにしたい。どなたかいい方法があれば教えてください。



以下参考。

元記事
Swiftでロード中アニメーションSVProgressHUDを利用するには

・ローディングを表示
SVProgressHUD.show()

・ローディングを表示(文字を入力)
SVProgressHUD.showWithStatus("読み込み中")

・成功
SVProgressHUD.showSuccessWithStatus("接続成功!!")
・失敗
SVProgressHUD.showErrorWithStatus("ネットワーク通信エラーです")
・引っ込める
SVProgressHUD.dismiss()

Swiftで遅延処理

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4