我有一个 UIView,可以像手指画应用程序一样绘制,但有时它不可见。我希望能够在它不可见时截取它的屏幕截图。另外,我想要一个可见的屏幕截图,但我不想要任何 subview 。我只想要 UIView 本身。这是我尝试过的方法:
func shapshot() -> UIImage? {
UIGraphicsBeginImageContext(self.frame.size)
guard let context = UIGraphicsGetCurrentContext() else {
return nil
}
self.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
if image == nil {
return nil
}
return image
}
func snapshot() -> UIImage {
UIGraphicsBeginImageContextWithOptions(bounds.size, self.isOpaque, UIScreen.main.scale)
layer.render(in: UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image!
}
最佳答案
要将 View 呈现为 UIImage
,您可以引入一个非常简单的协议(protocol)并用它扩展 UIView
。
protocol Renderable {
var render: UIImage { get }
}
extension UIView: Renderable {
var render: UIImage {
UIGraphicsImageRenderer(bounds: bounds).image { context in
layer.render(in: context.cgContext)
}
}
}
现在获取任何 View 的图像非常容易
let image: UIImage = someView.render
然后,如果您打算共享或保存它,您可能需要将其转换为数据
let data: Data? = image.pngData()
我不确定“当它不可见时”是什么意思,但只要 View 位于 View 层次结构中并且布局正确,这应该可以工作。我已经在许多应用程序中使用这种方法来共享内容,而且它从未让我失望过。
当然,不需要协议(protocol),可以随意使用 render
计算属性。这只是一个偏好问题。
关于ios - UIView不可见时截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65475264/