Swift 中使用 renderInContext 在屏幕上出现时捕获所选视图的问题

Issue capturing selected views as they appear on screen with renderInContext in Swift

我的故事板有三个视图,viewAviewBviewC

我正在尝试截屏只有两个视图出现在屏幕上的当前位置,viewBviewC.

问题是,当我渲染它们时,捕获的结果图像在不正确的位置显示 viewBviewC,视图的位置改变移动到左上角 (0, 0),请参见图片。

我如何更正下面的代码,以便我可以使用下面的 renderInContext 实现准确地捕获视图 viewBviewC 在视图中的位置?

UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0)
self.viewB.layer.renderInContext(UIGraphicsGetCurrentContext()!)
self.viewC.layer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()

来自 renderInContext: 的文档:

Renders in the coordinate space of the layer.

每个视图的图层原点为 0,0,因此它们都出现在左上角。

要解决此问题,您需要在调用 renderInContext:.

之前通过视图的原点转换图形上下文
UIGraphicsBeginImageContextWithOptions(self.view.frame.size, false, 0)
let ctx = UIGraphicsGetCurrentContext()

CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, self.viewB.frame.origin.x, self.viewB.frame.origin.y)
self.viewB.layer.renderInContext(UIGraphicsGetCurrentContext()!)
CGContextRestoreGState(ctx)

CGContextSaveGState(ctx)
CGContextTranslateCTM(ctx, self.viewC.frame.origin.x, self.viewC.frame.origin.y)
self.viewC.layer.renderInContext(UIGraphicsGetCurrentContext()!)
CGContextRestoreGState(ctx)

let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()