我正在尝试在函数运行时显示UIView,UIImage和UITextView,以便让用户知道它正在处理(类似于活动指示器,但更加自定义)。
当下面的代码正在处理时,UIView,UIImage和UITextView直到功能完成运行之前不显示(而不是显示功能开始运行,隐藏功能完成)。
我创建了一个UIView(loadingView),其中包含和image(loadingIcon)以及一个textView(loadingText),向用户解释应用正在处理的内容。
我还创建了一个名为isLoading的函数,它显示或隐藏所有3个,而不是多次重复这些行。我已经在viewDidLoad中测试了将isLoading设置为true和false以确保它正常工作。
@IBOutlet weak var loadingView: UIView!
@IBOutlet weak var loadingIcon: UIView!
@IBOutlet weak var loadingText: UIView!
override func viewDidLoad() {
super.viewDidLoad()
isLoading(false)
}
func isLoading(_ loadStatus: Bool) {
if loadStatus == true {
loadingView.isHidden = false
loadingIcon.isHidden = false
loadingText.isHidden = false
} else {
loadingView.isHidden = true
loadingIcon.isHidden = true
loadingText.isHidden = true
}
}
@IBAction func sendButtonPressed(_ sender: AnyObject) {
isLoading(true)
... //process information, which takes some time
isLoading(false)
}
非常感谢任何帮助,建议或想法。谢谢。
答案 0 :(得分:0)
您正在主队列上运行该进程,因此您的UI似乎会挂起,直到完成为止。您需要在后台处理信息。您可能会使用的常见模式是:
@IBAction func sendButtonPressed(_ sender: AnyObject) {
isLoading(true)
// Do the processing in the background
DispatchQueue.global(qos: .userInitiated).async {
... //process information, which takes some time
// And update the UI on the main queue
DispatchQueue.main.async {
isLoading(false)
}
}
}