private func scale(image ciImage: CIImage?, for scale: CGFloat) -> UIImage {
guard let ciImage = ciImage else {
return UIImage()
}
let image = UIImage(ciImage: ciImage)
let size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
let renderer = UIGraphicsImageRenderer(size: size)
return renderer.image(actions: { (context) in
image.draw(in: CGRect(origin: .zero, size: size))
})
}我正在使用这种方法来缩放(并在此之前生成)图像。这是在后台线程中完成的,然后将结果分派回主线程。然而,在image.draw上-有时10次中就有1次,应用程序使用EXC_BAD_ACCESS崩溃。
我做错了什么?我可以在后台做吗?
谢谢
发布于 2019-06-18 20:42:02
不要在后台线程中执行任何UI操作。所有UI更改都必须在主线程中完成
使用分派队列在main thread.Try中工作,如下所示
DispatchQueue.main.async {
image.draw(in: CGRect(origin: .zero, size: size))
}查看this answer以了解我们使用主线程执行UI操作的原因
https://stackoverflow.com/questions/56649275
复制相似问题