我对带有加载叠加层的图像的并行处理有疑问。我在需要几秒钟的函数中处理图像。在此期间应显示加载叠加层。
问题是,加载叠加层出现在处理图像之后,尽管它是在处理图像之前调用的。
@IBAction func onFilterRed(sender: UIButton) {
LoadingOverlay.shared.showOverlay(self.view)
var rgbaImage = RGBAImage(image: self.originalImage!)
rgbaImage?.adjustColor(red: 80, green: -30, blue: -30)
self.filteredImage = rgbaImage?.toUIImage()
imageView.image = self.filteredImage
}
我不知道为什么叠加层没有显示在它被调用的地方。
感谢任何提示, 迈克尔
最佳答案
据我所知,您仅在主线程上进行操作:这就是图像处理时 UI 被阻塞的原因。显示更新不会在您调用代码的那一刻发生:它与所有其他 UI 更新代码一起排队,因此它们将在每个运行循环中一起运行一次。您可以在这里看到解释:Order of operations in runloop on iOS .
无论如何,你可以这样解决:
@IBAction func onFilterRed(sender: UIButton) {
LoadingOverlay.shared.showOverlay(self.view)
// Run on a background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
var rgbaImage = RGBAImage(image: self.originalImage!)
rgbaImage?.adjustColor(red: 80, green: -30, blue: -30)
self.filteredImage = rgbaImage?.toUIImage()
// Run again on main thread (UI updating code MUST run on main thread)
dispatch_async(dispatch_get_main_queue()) {
imageView.image = self.filteredImage
}
}
}
关于ios - 图像处理后显示加载叠加图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38393783/