我正在创建一个图像过滤应用程序,基本上你的图像显示在视图控制器上,底部有几个不同的图像过滤器;单击一个会影响主图像的亮度(例如)。我注意到在更高分辨率的图像上应用过滤器需要更长的时间,所以我想创建一个完成处理程序(这是我第一次做这个完成的事情)并在视图控制器的中心显示“活动指示器视图”来通知它工作的用户......所以下面是改变图像亮度并将 CIImage 发送回视图控制器的函数(在 ImageProcessor.swift 类中):
func setBrightness(ciImage: CIImage, intensity: Float = 0.5, completion: (CIImage) -> CIImage) -> CIImage? {
let filter = CIFilter(name: "CIColorControls");
filter?.setValue(ciImage, forKey: kCIInputImageKey);
filter?.setValue(intensity, forKey: "inputBrightness");
return completion((filter?.outputImage)!);
}
那么这就是从视图控制器调用它的方式:
case .Brightness:
self.loader.startAnimating();
imgViewFiltered.image = processor.getUIImage(processor.setBrightness(CIImage(image: imgViewFiltered.image!)!, completion: { (let ci) -> CIImage in
dispatch_async(dispatch_get_main_queue()) {
self.loader.stopAnimating();
}
return ci;
})!)
lastUsedFilter = FilterTypes.Brightness;
appliedFilters.updateValue(0.5, forKey: FilterTypes.Brightness)
问题:
第一:我不知道自从我第一次使用完成处理程序以来我是否正确使用它,所以我会欢迎一些建议。
2:指示灯不显示或停止。该应用程序只是冻结了几秒钟并再次备份,这让我认为完成可能没有在后台完成它的工作。
非常感谢您的时间。