我想要实现的是拍摄一张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
以及如何?
答案 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;
}