gpt4 book ai didi

ios - 如何在后台线程上截取 UIView 的屏幕截图?

转载 作者:行者123 更新时间:2023-12-01 17:35:47 25 4
gpt4 key购买 nike

我正在开发的应用程序几乎每个屏幕上都有谷歌地图。为了节省内存,我到处重复使用相同的谷歌地图 View 。问题是,当您弹出 View Controller 时,您可以看到 map 所在的空白区域。为了解决这个问题,我在删除 map 之前对其进行截图并添加为背景。但是还有另一个问题,在 iPhoneX 上截屏大约需要 0.3 秒(我想在旧手机上更糟)。有没有办法在后台线程上截取 UIView 的屏幕截图?

最佳答案

我使用 swift 尝试了所有最新的快照方法。其他方法在后台对我不起作用。但是以这种方式拍摄快照对我有用。

使用参数 View 层和 View 边界创建扩展。

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!)
}
}
}

用法
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)
}
}

我们需要在主线程中计算层和边界,然后其他操作将在后台线程中进行。它将提供流畅的用户体验,而不会在 UI 中出现任何延迟或中断。

关于ios - 如何在后台线程上截取 UIView 的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52608516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com