[Swift]UIProgressView を利用して進捗状況を表示 + UIAlertController を利用して処理完了を通知


書くこと

・UIProgressView を利用して進捗状況を表示
・UIAlertController を利用して処理完了を通知

処理のイメージ

開発環境

PC MacBook Air(13-inch,2017)
PC OS macOS Catalina(ver 10.15.6)
IDE Xcode(ver 12.0.1)
iPhone SE(2nd Generation)
iPhone OS ver 14.0.1
Swift ver 5.3

前提条件

・Xcode を利用してデスクトップ上に Sample というプロジェクトアプリを作成する
・今回は、 Sample にある ViewController.swift にコードを記述する
UIProgressViewMain.storyboard 上に配置
UIProgressView は画面中央に配置されるよう制約を設定している
・下記コード例はリファクタリングを行っていない

コード例

ViewController.swift
import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var progressView: UIProgressView!

    override func viewDidLoad() {

        DispatchQueue.main.asyncAfter(deadline: .now() + 1){
            self.progressView.setProgress(1/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 2){
            self.progressView.setProgress(2/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 3){
            self.progressView.setProgress(3/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 4){
            self.progressView.setProgress(4/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 5){
            self.progressView.setProgress(5/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 6){
            self.progressView.setProgress(6/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 7){
            self.progressView.setProgress(7/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 8){
            self.progressView.setProgress(8/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 9){
            self.progressView.setProgress(9/10, animated: true)
        }
        DispatchQueue.main.asyncAfter(deadline: .now() + 10){
            self.progressView.setProgress(10/10, animated: true)
        }

        DispatchQueue.main.asyncAfter(deadline: .now() + 11){
            let alert:UIAlertController = UIAlertController(title: "お知らせ", message: "処理が終了しました", preferredStyle: .alert)
            let action:UIAlertAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            alert.addAction(action)
            self.present(alert, animated: true, completion: nil)
        }
    }

    override func viewWillAppear(_ animated: Bool) {
        progressView.progress = 0
    }
}