Wri*_*sCS 10 core-graphics layer calayer ipad ios
我正在使用Erica Saduns Cookbook示例Chapter 8, Example 14 — Resize and Rotate
来显然调整大小并旋转一个UIImageView
.
1.)条纹背景视图.
2.)可以调整大小和旋转的交互式视图.
3.)具有透明部分的叠加图像.此视图在128处开始y轴,为768x768.
4.)上方和下方3,高度为2视图128.
******见下面的照片示例****
目前,我可以将整个视图的图层保存到照片库中[[[self view] layer] renderInContext:
,并且#2的转换是正确的.但是,我需要一种方法来保存768x768 (照片示例中的浅绿色)框架,其中仅包括#2和#3,包括#2的转换.如果我使用[[#2 layer] renderInContext:
,我会得到原始图像,而不是转换.(参见下面的#参考屏幕截图.
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();
Run Code Online (Sandbox Code Playgroud)
我只需要LIME GREEN中概述的图像部分,同时保留用户的变换.
Lil*_*ard 17
如果我理解正确,问题是您只想渲染第2层,但第2层是否只有在渲染该层时才会保留的变换?在将图层渲染到该上下文之前,可以将这些变换应用于图形上下文的CTM(当前变换矩阵).这样的事情应该有效:
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
CGContextConcatCTM(ctx, [layer2 affineTransform]);
[layer2 renderInContext:ctx];
CGContextRestoreGState(ctx);
Run Code Online (Sandbox Code Playgroud)
注意,只有在绘制图层后想要在上下文中绘制更多内容时才需要调用CGContextSaveGState()
和CGContextRestoreGState()
.如果图层是您想要的,您可以省略它们.
归档时间: |
|
查看次数: |
7330 次 |
最近记录: |