我正在尝试将整个视图控制器作为图像或PDF共享。下面是我将视图控制器作为图像共享的当前代码,但我不确定如何修改边界以保存整个视图控制器,包括屏幕外的内容。我也不知道如何给一个选择,以保存为图像或PDF。
@IBAction func shareButton(_ sender: Any) {
let bounds = UIScreen.main.bounds
UIGraphicsBeginImageContextWithOptions(bounds.size, true, 0.0)
self.view.drawHierarchy(in: bounds, afterScreenUpdates: false)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let activityViewController = UIActivityViewController(activityItems: [img!], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.present(activityViewController, animated: true, completion: nil)
}
最佳答案
编辑:尝试下面列出的最终答案。
因此,要处理屏幕截图,必须在视图上的图形中进行渲染。应用程序使用SpriteKit
时除外。你可以得到一个很好的解释here:,但推测一下,获得屏幕截图的方法是通过graphicsContext
。任何不在屏幕上的内容都不在context
中,因此不能用于屏幕截图。但是,可以像使用SpriteKit
一样在视图外部手动绘制图形。
如果您使用的是SpriteKit
,您可以这样做(找到答案here):
func getScreenshot(scene: SKScene) -> UIImage {
let bounds = self.scene!.view?.bounds
UIGraphicsBeginImageContextWithOptions(bounds!.size, true, UIScreen.mainScreen().scale)
self.scene?.view!.drawViewHierarchyInRect(bounds!, afterScreenUpdates: true)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return screenshot;
}
let bounds = self.scene!.view?.bounds
这就是我之前看到的导致我发表评论的原因。编辑:要绘制到上下文,请尝试:
编辑:
view.layer.render(in: UIGraphicsGetCurrentContext()!)
找到HERE或在同一页上找到