ios - 图像处理后显示加载叠加图

标签 ios swift

我对带有加载叠加层的图像的并行处理有疑问。我在需要几秒钟的函数中处理图像。在此期间应显示加载叠加层

问题是,加载叠加层出现在处理图像之后,尽管它是在处理图像之前调用的。

@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/

相关文章:

ios - 检查哪个 UIScrollView 正在滚动?

arrays - 计算 Int Optionals 数组中空值的数量

ios - 如何在 swift 中正确更新 Realm 数据库中的数组列表数据?

ios - MPNowPlayingInfoCenter 不显示详细信息

ios - swift 3 ios : UILabel

ios - EKEventStore eventWithIdentifier 导致 EKCADErrorDomain 错误 1010

ios - 如何在 Swift 中调用位于另一个类中的函数?

ios - 来回切换时锁定的 ViewController 方向中断

ios - 如何在我的 iOS 应用程序中使用 YouTube 数据 API?我在每个请求中收到 "Access not configured"错误

ios - 如何在swift中使用模型类?