DispatchQueue main 未被调用
DispatchQueue main isn't called
我有一个执行计算和动画的异步任务,当动画开始时,队列暂停,当动画结束时,队列恢复。但由于某种原因,DispatchQueue.main.sync 从未被调用。
self.someQueue = DispatchQueue(label: "Animation", qos: .background, attributes: DispatchQueue.Attributes.concurrent)
for index in stride(from: volumeObjects.count, to: -1, by: -1) {
mainAsyncQueue.sync{
self.dynamicViewModel.currentPercentile = Float(index)/Float(volumeObjects.count)
self.currentObjectIndex = index
print(index)
DispatchQueue.main.sync {
UIView.animate(withDuration: 1, animations: {
self.updateViewModelDynamicViewModel()
}, completion: { (finished) in
self.someQueue.resume()
})
}
self.someQueue.suspend()
}
}
这只是小计算,我会用它来解决比这更复杂的任务
我假设这段代码在主线程中。
如果是这样,您已同步到后台线程并尝试从那里同步回 DispatchQueue.main
。但是那个队列在它可以做任何事情之前正在等待后台一个return。
感谢 Lou Franco 的回答,我做了一些修改:
DispatchQueue.global().async {
self.someQueue = DispatchQueue(label: "Animation", qos: .background, attributes: DispatchQueue.Attributes.concurrent)
for index in stride(from: volumeObjects.count, to: -1, by: -1) {
self.someQueue.sync{
self.dynamicViewModel.currentPercentile = Float(index)/Float(volumeObjects.count)
self.currentObjectIndex = index
print(index)
DispatchQueue.main.sync {
UIView.animate(withDuration: 0.1, animations: {
self.updateViewModelDynamicViewModel()
}, completion: { (finished) in
if finished {
self.someQueue.resume()
}
})
}
self.someQueue.suspend()
}
}
}
我有一个执行计算和动画的异步任务,当动画开始时,队列暂停,当动画结束时,队列恢复。但由于某种原因,DispatchQueue.main.sync 从未被调用。
self.someQueue = DispatchQueue(label: "Animation", qos: .background, attributes: DispatchQueue.Attributes.concurrent)
for index in stride(from: volumeObjects.count, to: -1, by: -1) {
mainAsyncQueue.sync{
self.dynamicViewModel.currentPercentile = Float(index)/Float(volumeObjects.count)
self.currentObjectIndex = index
print(index)
DispatchQueue.main.sync {
UIView.animate(withDuration: 1, animations: {
self.updateViewModelDynamicViewModel()
}, completion: { (finished) in
self.someQueue.resume()
})
}
self.someQueue.suspend()
}
}
这只是小计算,我会用它来解决比这更复杂的任务
我假设这段代码在主线程中。
如果是这样,您已同步到后台线程并尝试从那里同步回 DispatchQueue.main
。但是那个队列在它可以做任何事情之前正在等待后台一个return。
感谢 Lou Franco 的回答,我做了一些修改:
DispatchQueue.global().async {
self.someQueue = DispatchQueue(label: "Animation", qos: .background, attributes: DispatchQueue.Attributes.concurrent)
for index in stride(from: volumeObjects.count, to: -1, by: -1) {
self.someQueue.sync{
self.dynamicViewModel.currentPercentile = Float(index)/Float(volumeObjects.count)
self.currentObjectIndex = index
print(index)
DispatchQueue.main.sync {
UIView.animate(withDuration: 0.1, animations: {
self.updateViewModelDynamicViewModel()
}, completion: { (finished) in
if finished {
self.someQueue.resume()
}
})
}
self.someQueue.suspend()
}
}
}