我进行了很多搜索,但是找不到确定的循环进度指示器的很好解释。
我有一个将PDF转换为图像的Helper-Class。我有400多页,所以我决定使这些内容与以下代码异步:
DispatchQueue.concurrentPerform(iterations: pdfDocument.numberOfPages) { i in
… do the work …
view.incrementProgressIndicator()
}
洞察ProgressIndicator所在的视图,所调用的函数如下所示:
func incrementProgressIndicator() {
self.progressIndicator.increment(by: 1)
}
可以肯定,斯威夫特说:“在后台线程上调用了UI API”。
我试图用以下代码包围递增代码:
DispatchQueue.main.async {
self.progressIndicator.increment(by: 1)
}
但是现在,所有指示工作都是在 完成PDF转换之后完成的。
有人可以告诉我该怎么做吗?我找不到适合我的问题的实用教程。
谢谢您的帮助!
答案 0 :(得分:0)
我找到了解决我问题的方法。我替换
DispatchQueue.concurrentPerform(iterations: pdfDocument.numberOfPages) { i in
… do the work …
view.incrementProgressIndicator()
}
具有以下代码:
for i in 0..<pdfDocument.numberOfPages {
DispatchQueue.global(qos: .background).async {
let pdfPage = pdfDocument.page(at: i + 1)!
if let result = self.convertPageToImage(withPdfPage: pdfPage, sourceURL: sourceURL, destUrl: destinationURL, index: i) {
urls[i] = result
}
DispatchQueue.main.async {
if let delegate = self.delegate {
print("Ask for Increment")
delegate.incrementProgressIndicator()
}
}
}
}