我试图将整个视图控制器共享为图像或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)
}
编辑:尝试在底部列出最终答案。
因此,要处理ScreenShot,必须在视图的图形中进行渲染。除了应用程序使用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或view.layer.draw(in: UIGraphicsGetCurrentContext()!)