こんにちは!株式会社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()