【Swift4】UIProgressViewのミニマムサンプル【iOS】

とりあえず下のコードをコピペしてビルドするだけで図のようなプログレスバーを表示することが可能です。進捗度が100％になると「please wait ...」を「Complete !」に書き換える簡単なサンプルです。

*for Xcode version 9.2 beta / Swift4*
<img width="300" alt="iPhone_8_Plus_-_11_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/4ffb5feb-8dad-d660-4830-e5364764824c.png"><img width="300" alt="iPhone_8_Plus_-_11_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/5d1f7dff-59e1-28c2-0543-e2f7e7f6a027.png">


ViewController.swift

```Swift:ViewController.swift
import UIKit

class ViewController: UIViewController {

    var label:UILabel!
    var progressView:UIProgressView!
    var progress:Float = 0.0
    var timer:Timer!
    var restartButton:UIButton!
    
    @objc func restart(_ s:UIButton) {

        timer.invalidate()
        progress = 0
        label.text = "please wait ..."
        timer = Timer.scheduledTimer(timeInterval: 0.01,
                             target: self,
                             selector: #selector(ViewController.timerUpdate),
                             userInfo: nil,
                             repeats: true)
        
        // リセット時にアニメーションしたくないときはコメントアウトを解除
        //progressView.setProgress(progress, animated: false)
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        /// ラベル
        label = UILabel(frame: CGRect(x:0,y:0,width:UIScreen.main.bounds.width - 20,height:20))
        var labelCenterPos = view.center
        labelCenterPos.y = labelCenterPos.y + 30
        label.center = labelCenterPos
        label.text = "please wait ..."
        label.textAlignment = .center
        view.addSubview(label)
        
        /// プログレスバー
        progressView = UIProgressView(frame: CGRect(x:0,y:0,width:UIScreen.main.bounds.width - 60,height:20))
        progressView.center = view.center
        progressView.transform = CGAffineTransform(scaleX: 1.0, y: 6.0)
        progressView.progressTintColor = .blue
        progressView.setProgress(progress, animated: true)
        view.addSubview(progressView)

        /// 再開ボタン
        restartButton = UIButton(frame: CGRect(x:0,y:0,width:80,height:40))
        var buttonCenterPos = view.center
        buttonCenterPos.y = UIScreen.main.bounds.height - 100
        restartButton.center = buttonCenterPos
        restartButton.setTitle("restart", for: .normal)
        restartButton.setTitleColor(.blue, for: .normal)
        restartButton.setTitleColor(.red, for: .highlighted)
        restartButton.addTarget(self, action: #selector(ViewController.restart(_:)), for: .touchUpInside)
        view.addSubview(restartButton)
        
        /// タイマー
        timer = Timer.scheduledTimer(timeInterval: 0.01,
                             target: self,
                             selector: #selector(ViewController.timerUpdate),
                             userInfo: nil,
                             repeats: true)
    }

    @objc func timerUpdate() {
        progress = progress + 0.001
        if progress < 1.1 {  // 浮動小数点誤差のため、<= 1.0 だとtrueにならないことがある
            progressView.setProgress(progress, animated: true)
        } else {
            timer.invalidate()
            label.text = "Complete !"
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
```

進捗度はUIProgressViewのインスタンスメソッド、**`setProgress()`**にて設定します。**`1.0`**で100％です。

**その他のミニマムサンプルシリーズ**
[【Swift4】UITableViewのミニマムサンプル【iOS】](https://qiita.com/fromage-blanc/items/ae8a082c0eb31d9a3b7a)
[【Swift4】WKWebViewのミニマムサンプル【iOS】](https://qiita.com/fromage-blanc/items/079bc8d6da34ac90fecf)