显示等待视图,直到图像过滤进行中

时间:2015-11-25 09:11:06

标签: ios swift uiactivityindicatorview

大家好(我的第一个问题,我认为:)),

我是Swift和iOS编程的新手。我正在进行图像过滤,我正在尝试使用UIActivityIndicatorView等待加载过滤后的图像。活动指示器包含在另一个带有文本标签的视图中:“正在过滤”。但是,等待视图不会出现。

通过调试,我注意到在执行一行代码后,视图不会立即更新;整个块执行后更新视图。因此,在这种情况下,以下代码无效:

showActivityView()  //shows the view with text and spinner
filteredImageView.image = imageProcessor.clearFilters().addFilter(currentFilter).filter() //shows filtered image on image view
hideActivityView() //hides the view with text and spinner

这不起作用,因为我猜想,hideActivityView()完成后整个视图会更新。知道如何以干净的方式实现这一点。

如果有人知道的话,有一些好的相关参考也会很好。我试图找到自己,但到目前为止没有运气。 非常感谢。

2 个答案:

答案 0 :(得分:1)

你应该在另一个线程中进行过滤。您可以使用 Grand Central Dispatch tutorial here)来完成此操作。 您的代码看起来类似于以下内容:

showActivityView()  //shows the view with text and spinner
var image: UIImage?

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INITIATED, 0), {

    image = imageProcessor.clearFilters().addFilter(currentFilter).filter() //shows filtered image on image view

    dispatch_async(dispatch_get_mein_queue(), {
        filteredImageView.image = image!
        hideActivityView() //hides the view with text and spinner
    }

}

答案 1 :(得分:0)

非常感谢提示。我今天读了很多关于这个概念的文章。所以,我先创建一个队列:

var waitQueue: dispatch_queue_t = dispatch_queue_create("waiter", nil)

然后将所有过滤作业排入队列..如mad_manny的解决方案中所述。

let activityView = showActivityView("Filter in Progress..")
dispatch_async(waitQueue) {
self.currentFilter = filter.changeIntensity((filter.MIN_INTENSITY+filter.MAX_INTENSITY)/2)                
self.filteredImage = self.imageProcessor.clearFilters().addFilter(self.currentFilter).filter()                
dispatch_async(dispatch_get_main_queue()) {                    
  self.filteredImageView.image = self.filteredImage                    
  self.hideActivityView(activityView)                    
  self.showFilteredImage()                
  }            
}