使用Swift中的renderInContext捕获在屏幕上显示的所选视图的问题

时间:2016-04-06 03:07:48

标签: ios swift uigraphicscontext

我的故事板上有三个观看点,viewAviewBviewC

我正在尝试屏蔽捕获两个视图,因为它们显示在当前位置的屏幕上, viewB {{1} }

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

如何更正下面的代码,以便我可以使用下面的viewC实现完全捕捉视图中的viewBviewC视图?

renderInContext

enter image description here

1 个答案:

答案 0 :(得分:4)

来自renderInContext:的文档:

  

在图层的坐标空间中渲染。

每个视图的图层都有一个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()