我使用CIFilter创建一个UIImage,然后将其添加到UIImageView上。创建此图像的过程非常快,我可以将其添加到图像视图中。但是整个UI会冻结几秒钟,直到它显示过滤后的图像。我检查了CIFilter调用是否很快。我认为缓慢是由UIImageView渲染图像引起的。如果图像已经创建,为什么这么慢?下面是制作图像过滤器的代码。
func photoEffectChrome() -> CIFilter {
let filter = CIFilter(name: "CIPhotoEffectChrome")!
return (filter)
}
func outputImage(filter: CIFilter, originalImage: UIImage) -> UIImage{
print(filter)
let inputImage = CIImage(image: originalImage)
filter.setValue(inputImage, forKey: kCIInputImageKey)
let cgImage = context!.createCGImage(filter.outputImage!, fromRect: (filter.outputImage?.extent)!)
return UIImage(CGImage: cgImage, scale: 1, orientation: originalImage.imageOrientation)
}
对上述方法的调用发生在后台线程上,然后我使用blow方法将它添加到滚动视图上。
dispatch_async(dispatch_get_main_queue(), {
self.filterScrollView.addSubview(uiView)
})
如果我注释掉“self.filterScrollView.addSubview(uiView)”,则UI会顺利运行。为什么渲染图像需要很长时间?更具体地说,它发生在模拟器上。在设备上运行时,它的工作速度要快得多。
答案 0 :(得分:0)
但整个用户界面会冻结几秒钟,直到显示过滤后的图片
这种问题表明在后台线程上调用了设置UIImageView的image
(未在问题中显示)的方法。你不能这样做。