截取iOS上当前不在屏幕上的视图的屏幕截图

时间:2012-12-20 19:23:30

标签: ios uiviewcontroller uiimage

我正在尝试在两个ViewControllers之间进行转换。我的Transition类具有目标视图控制器的属性。当我尝试获取目的地视图的屏幕截图时,我使用此方法:

+ (UIImage *)renderImageFromView:(UIView *)view withRect:(CGRect)frame {
    // Create a new context the size of the frame
    UIGraphicsBeginImageContextWithOptions(frame.size, YES, 0);
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Render the view 
    [view.layer renderInContext:context];

    // Get the image from the context
    UIImage *renderedImage = UIGraphicsGetImageFromCurrentImageContext();

    // Cleanup the context you created
    UIGraphicsEndImageContext();

    return renderedImage;
}

所以当我想要图像时,我会这样做:

UIImage *image = [UIImage renderImageFromView:destinationController.view withRect:destinationController.view.bounds];

我在一个带有橙色背景颜色和标签的空白UIViewController上尝试过它。我得到橙色背景颜色,但我没有得到在IB中创建的标签。有没有办法获得我计划展示的新视图的正确屏幕截图?谢谢!

1 个答案:

答案 0 :(得分:1)

您需要确保首先绘制视图的图层。在CALayer上调用renderInContext只会递归调用其他子CALayer。您需要您的孩子UIView自己画画,而不仅仅是使用CALayer

尝试拨打

[view drawrect:frame]; 

而不是

[view.layer renderInContext:context];

只要你有一个开放的图形上下文(你在那时做),drawrect应该直接绘制到它。