Loading画面の表示

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画面外す
    }
}