Dem*_*ese 3 uiview ios swift ios-multithreading
我正在开发的应用程序几乎每个屏幕上都有谷歌地图。为了节省内存,我在各处重复使用相同的谷歌地图视图。问题是,当您弹出视图控制器时,您可以看到地图所在的空白区域。为了解决这个问题,我在删除地图之前对其进行了屏幕截图并添加为背景。但还有一个问题,在 iPhoneX 上截图大约需要 0.3 秒(我想在旧手机上情况更糟)。有没有办法在后台线程上截取 UIView 的屏幕截图?
我使用 swift 尝试了所有最新的快照方法。其他方法在后台对我不起作用。但这种方式拍摄快照对我来说很有效。
使用参数视图层和视图边界创建扩展。
extension UIView {
func asImageBackground(viewLayer: CALayer, viewBounds: CGRect) -> UIImage {
if #available(iOS 10.0, *) {
let renderer = UIGraphicsImageRenderer(bounds: viewBounds)
return renderer.image { rendererContext in
viewLayer.render(in: rendererContext.cgContext)
}
} else {
UIGraphicsBeginImageContext(viewBounds.size)
viewLayer.render(in:UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIImage(cgImage: image!.cgImage!)
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法
DispatchQueue.main.async {
let layer = self.selectedView.layer
let bounds = self.selectedView.bounds
DispatchQueue.global(qos: .background).async {
let image = self.selectedView.asImageBackground(viewLayer: layer, viewBounds: bounds)
}
}
Run Code Online (Sandbox Code Playgroud)
我们需要在主线程中计算图层和边界,然后其他操作将在后台线程中进行。它将提供流畅的用户体验,用户界面不会出现任何延迟或中断。
| 归档时间: |
|
| 查看次数: |
2621 次 |
| 最近记录: |