@IBOutlet weak var Input: UITextField!
@IBOutlet weak var Heads: UILabel!
@IBOutlet weak var working: UIActivityIndicatorView!
@IBAction func Toss(_ sender: Any) {
DispatchQueue.global().sync {
//set up variables and method
var input = 0
func integer(from textField: UITextField) -> Int {
guard let text = textField.text, let number = Int(text) else {
return 0
}
return number
}
var runningTotal = 0
//collect input
input = integer(from: Input)
//start loading symbol
DispatchQueue.main.async() { [self] in
working.startAnimating()
}
//do math
for _ in 0..<input {
let currentTrial = Int.random(in: 0...1)
if(currentTrial == 1) {
runningTotal = 1
}
}
DispatchQueue.main.async { [self] in
//set output
Heads.text = String(runningTotal)
//stop loading symbol
working.stopAnimating()
}
}
}
該程式計算進行 x 次硬幣翻轉(由用戶指定)時翻轉的正面次數。我的活動微調器根本不顯示,即使它被設定為在影片時出現。任何幫助,將不勝感激!
uj5u.com熱心網友回復:
所以,首先去看看檔案DispatchQueue
該sync函式讀取...
func sync(execute: () -> Void)
提交一個塊物件以供執行,并在該塊執行完畢后回傳。
這不是您想要的,這將阻塞主執行緒并阻止 UI 更新。
相反,您要使用的是其中一種async變體,例如...
func async(group: DispatchGroup?, qos: DispatchQoS, flags: DispatchWorkItemFlags, execute: () -> Void)
異步調度塊執行,并可選擇將其與調度組關聯。
您還應該input在運行后臺執行緒之前獲取該值,因為您應該避免訪問主執行緒背景關系之外的組件。
可運行示例...
class ViewController: UIViewController {
@IBOutlet weak var textField: UITextField!
@IBOutlet weak var working: UIActivityIndicatorView!
@IBOutlet weak var headsLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
headsLabel.isHidden = true
}
@IBAction func doStuff(_ sender: Any) {
var input = 0
func integer(from textField: UITextField) -> Int {
guard let text = textField.text, let number = Int(text) else {
return 0
}
return number
}
input = integer(from: textField)
working.startAnimating()
DispatchQueue.global(qos: .userInitiated).async {
//set up variables and method
var runningTotal = 0
//do math
for _ in 0..<input {
let currentTrial = Int.random(in: 0...1)
if(currentTrial == 1) {
runningTotal = 1
}
}
DispatchQueue.main.async { [self] in
headsLabel.isHidden = false
//set output
headsLabel.text = String(runningTotal)
//stop loading symbol
working.stopAnimating()
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/322508.html
標籤:迅速 大中央调度 uiactivityindicatorview 调度队列
上一篇:在安全區忽略安全區
