SVProgressHUDとSwiftGifOriginでつくるカスタムローディング

こんにちは!株式会社Pentagon代表の山本です。iOSアプリ開発を7年以上やっています。

今回、デザインチームからgifをローディングとして表示したいと言われたので、最小の労力で実現する方法を考えました。

【この記事を読むメリット】

この記事を読むとgifを簡単にローディングとして表示することができます。Swiftエンジニアはぜひ参考にしてください。

【結論】

SVProgressHUDとSwiftGifOriginの2つのライブラリを組み合わせて、gifローディングを実現します。

目次

好きなgifをローディングとして表示できる

Podfileを設定

今回、SVProgressHUDというローディングライブラリとSwiftGifOriginというgifを表示するライブラリを組み合わせます。

  pod 'SVProgressHUD'
  pod 'SwiftGifOrigin'

SVProgressHUDをラップして使う

import SVProgressHUD
import SwiftGifOrigin

struct Progress {
    static let gif = UIImage.gif(name: "loading")

    static func configure() {
        // allow user interactions while HUD is displayed
        SVProgressHUD.setDefaultMaskType(.none)
        SVProgressHUD.setDefaultAnimationType(.native)
        SVProgressHUD.setMinimumSize(CGSize(width: 120, height: 120))
        SVProgressHUD.setImageViewSize(CGSize(width: 120, height: 120))
        SVProgressHUD.setDefaultStyle(.custom)
        SVProgressHUD.setFont(.boldSystemFont(ofSize: 14.0))
        SVProgressHUD.setMinimumDismissTimeInterval(2.0)
        SVProgressHUD.setMaximumDismissTimeInterval(10.0)
    }

    static func show() {
        if let gif = Progress.gif {
            SVProgressHUD.show(gif, status: nil)
        } else {
            SVProgressHUD.show()
        }
    }

    static func showError(with message: String? = nil) {
        SVProgressHUD.showError(withStatus: message)
    }

    static func showSuccess(with message: String? = nil) {
        SVProgressHUD.showSuccess(withStatus: message)
    }

    static func dismiss(_ completion: (() -> Void)? = nil) {
        SVProgressHUD.dismiss {
            completion?()
        }
    }

    static func showInfo(with message: String? = nil) {
        SVProgressHUD.showInfo(withStatus: message)
    }
}

あとはshowで表示するだけ。

Progress.show()
採用情報はこちら
目次