1

我想要实现的是拍摄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的,如果如何?

4

2 回答 2

3

嗯,这是尴尬。
在与一位非常友善的苹果开发支持人员进行邮件交谈后,我们查看了我的代码,我们注意到我只是将hidden属性设置为YES. - 不要那样做。

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

于 2013-04-10T08:20:23.723 回答
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;
}
于 2013-04-03T11:11:58.263 回答