我的故事板上有三个观看点,viewA
,viewB
,viewC
。
我正在尝试屏蔽捕获仅两个视图,因为它们显示在当前位置的屏幕上, viewB
和 {{1} }
问题是,当我渲染它们时,捕获的结果图像在不正确的位置显示viewC
和viewB
,视图的位置改变向左上方移动(0,0),参见图像。
如何更正下面的代码,以便我可以使用下面的viewC
实现完全捕捉视图中的viewB
和viewC
视图?
renderInContext
答案 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()