渲染不在视图层次结构中的UIView层

时间:2013-04-03 10:45:33

标签: uiview core-graphics calayer

我想要实现的是拍摄一张UIView的图像,该图像尚未作为子视图添加,呈现并对图像进行处理,然后将视图添加到视图层次结构中。

我已经搜索并尝试了一段时间并相信,这根本不可能。


显然问题是,如果尚未将视图添加为子视图,则尚未绘制视图(我猜是drawRect:)。 实际上我认为renderInContext:会自己调用drawRect/layer

在将其绘制到imageContext之前将其添加为子视图是不够的,因为它不会立即呈现。

我将带有renderInContext:的屏幕截图与视图图层一起使用,请参阅我的代码:

[self.view addSubView:view];
UIGraphicsBeginImageContextWithOptions(view.frame.size, YES, 0);
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextTranslateCTM(context, -frame.origin.x, -frame.origin.y);

[view.layer renderInContext:context];

UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

所以我的问题是,是否有人设法呈现不可见 UIView以及如何?

2 个答案:

答案 0 :(得分:3)

这很尴尬 在与一个非常友好的苹果开发支持的邮件对话之后,我们检查了我的代码,我们注意到我只是将hidden属性设置为YES。 - 就是不要这样做。

因此,直接制作不在视图层次结构中的视图的屏幕截图 这完全是我的错,为什么它不起作用。

答案 1 :(得分:0)

尝试将UIView添加到层次结构中,但保持隐藏状态。

- (void)takeScreenSnapshot {

     UIView *capturedView = self.view;    
     UIView *hiddenView = self.hiddeniew;  //  hidden view which is 
                                           //  a part of capturedView   
     hiddenView.hidden = NO;

     BOOL retina = [self isRetinaDisplay];
     UIImage *image = [capturedView captureImageWithScale:(retina) ? 2.f : 1.f];

     hiddenView.hidden = YES;
}