職場でIndicatorとメインスレッド・サブスレッドについて使用する機会があるので備忘録としてここに記す。
インジゲーターについて
主に重い処理や通信などを行う際に使用する。
メインスレッドやサブスレを意識する際に同時並行して使用する認識だが合ってるかな?
グローバルで変数を宣言
let activityIndicatorView = UIActivityIndicatorView()
viewdidloadでUI系を調整
override func viewDidLoad() {
super.viewDidLoad()
// インジゲーターを中心に位置
activityIndicatorView.center = view.center
// インジゲーターのスタイル
activityIndicatorView.style = UIActivityIndicatorView.Style.medium
// インジゲーターのカラー
activityIndicatorView.color = .red
// インジゲーターをviewに追加
view.addSubview(activityIndicatorView)
}
ボタン押下時にインジゲーターのを回すようロジックを組む
@IBAction func action(_ sender: Any) {
// アニメーションをスタート
activityIndicatorView.startAnimating()
// 重たい処理を実行 いわゆるサブスレッド(非同期処理などを実行)
// サブスレッドで何か重い処理をして終わったらメインスレッドに戻す
DispatchQueue.global().async {
/* 処理を一定時間止める。同期処理で、一定時間処理を待たせたり、
数秒間何かを表示してから消すとかそういう時に使える。 */
Thread.sleep(forTimeInterval: 5)
DispatchQueue.main.async {
// メインスレッドはUIの処理など
// アニメーションをストップ
self.activityIndicatorView.stopAnimating()
}
}
}
締め
他にインジゲーターとメインスレッド/サブスレッドで有用な使用方法があれば教えてください!