Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将变换的图像层应用于renderInContext: 背景_Ios_Ipad_Core Graphics_Calayer_Layer - Fatal编程技术网

Ios 将变换的图像层应用于renderInContext: 背景

Ios 将变换的图像层应用于renderInContext: 背景,ios,ipad,core-graphics,calayer,layer,Ios,Ipad,Core Graphics,Calayer,Layer,我正在使用Erica Saduns的烹饪书示例来调整和旋转UIImageView 视图层次结构 1.)条带化背景视图 2.)可调整大小和旋转的交互式视图 3.)具有透明部分的覆盖图像。此视图的y轴从128开始,为768x768 4.)在3上方和下方,有2个高度为128的视图 ******见下面的照片示例**** 问题 目前,我可以使用[[[self view]layer]renderInContext:将整个视图层保存到照片库,并且#2的转换是正确的。但是,我需要一种方法来保存768x768(照

我正在使用Erica Saduns的烹饪书示例来调整和旋转
UIImageView

视图层次结构 1.)条带化背景视图

2.)可调整大小和旋转的交互式视图

3.)具有透明部分的覆盖图像。此视图的y轴从128开始,为768x768

4.)在3上方和下方,有2个高度为128的视图

******见下面的照片示例****

问题 目前,我可以使用
[[[self view]layer]renderInContext:
将整个视图层保存到照片库,并且#2的转换是正确的。但是,我需要一种方法来保存768x768(照片示例中为淡绿色)仅包含#2#3的帧,包括#2的转换。如果我使用
[[2层]renderContext:
,我会得到原始图像,而不会转换。(请参见下面的屏幕截图以获取参考。)

代码 照片示例 我只需要石灰绿中勾勒出的图像部分,同时保留用户的变换


如果我理解正确,问题是您只想渲染第2层,但第2层在渲染该层时没有保留变换?您可以将这些变换应用到图形上下文的CTM(当前变换矩阵)在将层渲染到该上下文中之前。类似的操作应该可以:

CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, [layer2 affineTransform]);
[layer2 renderInContext:ctx];
CGContextRestoreGState(ctx);

注意,对
CGContextSaveGState()
CGContextRestoreGState()的调用
仅在绘制层后,如果您想在上下文中绘制更多内容,则必须使用它们。如果层是您想要的,则可以忽略它们。

我需要能够仅包含#2和#3,这是两个不同的
UIImageView
。@WrightsCS:3不是#2的子视图吗?如果不是,您可以在绘制后将#3渲染到上下文中endered#2.您必须应用自己的仿射变换来设置每个层的上下文原点。每个层都是主视图的子视图,没有一个是其他层的子视图。@WrightsCS:您可以再次使用CTM。只需使用
cgContextTranslateCm(view.frame.origin.x,view.frame.origin.y)
在绘制视图之前调整CTM(对于第2层,在进行转换后将其
仿射变换应用于CTM)。然后可以绘制第2层,然后绘制第3层(每个层都有自己的转换)。请注意,您将希望保存和恢复平移/渲染周围的GState。因此,如果转换#2,我将如何计算它的x和y,因为它们应随每次旋转/调整大小而改变,我理解正确吗?
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, [layer2 affineTransform]);
[layer2 renderInContext:ctx];
CGContextRestoreGState(ctx);