文系プログラマの勉強ノート

スマホアプリ開発やデザインなどについて勉強したことをまとめています

【Xcode】UIAlertControllerで簡単進捗ダイアログ作成

カスタムビューを作らず、UIAlertControllerで簡単な進捗ダイアログを表示する方法です。

f:id:an3714106:20170213234543p:plain

// インジケータ表示
alert = UIAlertController(title: "Loading...", message: "\n", preferredStyle: .alert)

let indicator = UIActivityIndicatorView()
indicator.translatesAutoresizingMaskIntoConstraints = false
alert.view.addSubview(indicator)

let views: [String: UIView] = ["alert": alert.view, "indicator": indicator]
var constraints = NSLayoutConstraint.constraints(withVisualFormat: "V:[indicator]-(12)-|",
                                                 options: [],
                                                 metrics: nil,
                                                 views: views)
constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[indicator]|",
                                              options: [],
                                              metrics: nil,
                                              views: views)
alert.view.addConstraints(constraints)

indicator.isUserInteractionEnabled = false
indicator.color = UIColor.lightGray
indicator.startAnimating()

present(alert, animated: true, completion: {
    DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
        self.alert.dismiss(animated: true, completion: {
            self.alert = nil
        })
    }
})


こちらのサイトの回答を参考にSwift3.0の文法で書き直し、インジケータの位置を調整しました。
アラートの高さをmessageの改行で調整しているのが少々ださいですが、
カスタムビューを作らなくて良いのでお手軽ですね。
stackoverflow.com