我正在使用来自Chapter 8, Example 14 — Resize and Rotate
的Erica Saduns Cookbook示例来明显调整大小并旋转UIImageView
。
1。)条纹背景视图。
2。)可以调整大小和旋转的交互式视图。
3.)具有透明部分的叠加图像。此视图在128处开始y轴,为768x768。
4。)上方和下方3,高度为2个视图128。
******见下面的照片示例****
目前,我可以使用[[[self view] layer] renderInContext:
将整个视图的图层保存到照片库,#2 的转换是正确的。但是,我需要一种方法来保存 768x768 (图片中的柠檬绿) 框架,其中仅包含#2 和#3 ,包括#2 的转换。如果我使用[[#2 layer] renderInContext:
,我会获得原始图像,而不会进行转换。 (参见下面的#reference参考。
CGSize deviceSpec;
if ( IDIOM == IPAD ) { deviceSpec =CGSizeMake(768,768); } else { deviceSpec =CGSizeMake(320,480); }
if ( scale > 1.5 ) {
UIGraphicsBeginImageContextWithOptions(deviceSpec, NO, scale);
} else {
UIGraphicsBeginImageContext( deviceSpec );
}
CGContextRef ctx = UIGraphicsGetCurrentContext();
[[stripedBg layer] renderInContext:ctx]; //#1
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, [[interactiveImage layer] affineTransform]);
//CGContextTranslateCTM(ctx, interactiveImage.frame.origin.x,interactiveImage.frame.origin.y-128);
[[interactiveImage layer] renderInContext:ctx]; // #2
CGContextRestoreGState(ctx);
[[overlayImage layer] renderInContext:ctx]; // #3
UIImage * draft = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
我只需要 LIME GREEN 中列出的图像部分,同时保留用户的转换。
答案 0 :(得分:17)
如果我理解正确,问题是您只想渲染第2层,但第2层是否只有在渲染该层时才会保留?在将图层渲染到该上下文之前,可以将这些变换应用于图形上下文的CTM(当前变换矩阵)。这样的事情应该有效:
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, [layer2 affineTransform]);
[layer2 renderInContext:ctx];
CGContextRestoreGState(ctx);
注意,只有在绘制图层后想要在上下文中绘制更多内容时,才需要调用CGContextSaveGState()
和CGContextRestoreGState()
。如果您想要图层,则可以省略它们。