UIViewControllerにshowLoadingViewとdismissLoadingViewという二つFunctionを拡張する。
import UIKit fileprivate var loadingView: UIView! extension UIViewController { func showLoadingView() { loadingView = UIView(frame: view.bounds) view.addSubview(loadingView) loadingView.backgroundColor = .systemBackground loadingView.alpha = 0 UIView.animate(withDuration: 0.24) { loadingView.alpha = 0.8 } let activityIndicator = UIActivityIndicatorView(style: .large) loadingView.addSubview(activityIndicator) activityIndicator.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ activityIndicator.centerYAnchor.constraint(equalTo: loadingView.centerYAnchor), activityIndicator.centerXAnchor.constraint(equalTo: loadingView.centerXAnchor) ]) activityIndicator.startAnimating() } func dismissLoadingView() { loadingView.removeFromSuperview() loadingView = nil } }
使用例:ViewController起動時Loading画面を表示、重いデータ取得処理終了後Loading画面外す。
class ChartViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() ... // 他の初期処理 showLoadingView() // Loading画面表示 } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) ... // 重いデータ取得処理 dismissLoadingView() // Loading画面外す } }