作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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))
})
}
我正在使用这种方法来缩放(并在此之前生成)图像。这是在后台线程中完成的,然后将结果分派(dispatch)回主线程。但是,在 image.draw 上——有时十分之一,应用程序会因 EXC_BAD_ACCESS 而崩溃。
我做错了什么?我可以在后台这样做吗?
谢谢
最佳答案
不要在后台线程中执行任何 UI 操作。所有 UI 更改都必须在主线程中完成
使用调度队列在主线程中工作。像这样尝试
DispatchQueue.main.async {
image.draw(in: CGRect(origin: .zero, size: size))
}
查看 this 答案以了解我们为什么使用主线程来执行 UI 操作
关于ios - 在后台线程中缩放图像崩溃 - UIGraphicsImageRenderer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56649275/
我是一名优秀的程序员,十分优秀!