2013-04-03 139 views
1

我想实现的是拍摄未添加为子视图的UIView的图像,然后将图像添加到视图中,然后将视图添加到视图层次。渲染不在视图层次结构中的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如果怎么样?

回答

3

好吧,这很尴尬。
经过与非常友好的苹果开发支持的邮件对话后,我们检查了我的代码,我们注意到我简单地将hidden属性设置为YES。 - 不要那样做。

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

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; 
} 
+0

可悲的不是我想要的。即使它能工作,我也不能在之前添加视图。 – yinkou