【发布时间】:2019-06-06 08:31:54
【问题描述】:
我有一个辅助 LaunchScreenViewController 用于具有一些动画同时收集三种背景数据的应用程序。
一切正常,但 DispatchQueues.async 的运行顺序是随机的。但是,如果我将它们更改为 DispatchQueues.sync 一切都以正确的顺序发生,但运行速度如此之快(即使有睡眠)你看不到动画。
这需要 .sync 但我如何控制 U/I 以便我可以看到动画? (此处显示为,例如 self.subLogo1View.isHidden = true)
代码如下:
// Queuing Variables
var semaphore = DispatchSemaphore(value: 1)
var semaphoreSub = DispatchSemaphore(value: 1)
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global().async {
self.semaphore.wait()
self.gatherData()
self.semaphore.signal()
}
DispatchQueue.global().async {
self.semaphore.wait()
self.checkNetworkAvailability()
self.semaphore.signal()
}
DispatchQueue.global().async {
self.semaphore.wait()
self.checkSomething()
self.semaphore.signal()
}
}
func gatherData() {
DispatchQueue.main.async {
self.semaphoreSub.wait()
print ("1")
self.subLogo1View.isHidden = true
self.subLogo1View.setNeedsDisplay()
self.semaphoreSub.signal()
}
}
func checkNetworkAvailability() {
DispatchQueue.main.async {
self.semaphoreSub.wait()
print ("2")
self.subLogo2View.isHidden = true
self.subLogo2View.setNeedsDisplay()
self.semaphoreSub.signal()
}
}
func checkSomething() {
DispatchQueue.main.async {
self.semaphoreSub.wait()
print ("3")
self.subLogo3View.isHidden = true
self.subLogo3View.setNeedsDisplay()
self.semaphoreSub.signal()
}
}
【问题讨论】:
-
动画的代码在哪里?你最好尝试使用完成/回调来做事。
-
Psuedo - 在第三段中提到 - “这需要 .sync 但我如何控制 U/I 以便我可以看到动画?(此处显示为,例如 self.subLogo1View。 isHidden = true)" 检查回调 - 谢谢。
-
闭包做到了。
标签: swift semaphore dispatch-queue